首页 > 其他 > 详细

Django学习路18_F对象和Q对象

时间:2020-05-11 19:25:21      阅读:46      评论:0      收藏:0      [点我收藏+]
F 对象:
可以使用模型的 A 属性和 B 属性进行比较
写法:
需要的数据对象 = 数据表(类名).objects.filter(列名__条件=F(列名2))
需求: 查看男生数量比女生少 的公司名称
companies = Company.objects.filter(c_boy_num__lt=F(c_girl_num))

F 对象支持算术运算

需求: 查看男生数量比女生少 15个的公司名称
companies = Company.objects.filter(c_boy_num__lt=F(c_girl_num)-15)

在 models.py 中创建数据表 Company

class Company(models.Model):
    c_name = models.CharField(max_length=16)
    # 公司名字
    c_girl_num = models.IntegerField(max_length=16)
    # 女生人数
    c_boy_num = models.IntegerField(max_length=16)
    # 男生人数

产生迁移文件
python manage.py makemigrations

进行迁移
python manage.py migrate

添加数据

技术分享图片

 

 


 

在 urls.py 中进行注册

需求:
查看 女生多于男生的公司名称

url(rgetgirlgtboy,views.getgirlgtboy)
views.py 中创建 getgirlgtboy 函数

def getgirlgtboy(request):
    companies = Company.objects.filter(c_girl_num__gt=F(c_boy_num))
    for company in companies:
        # 进行遍历后查看公司名
        print(company.c_name)
    return HttpResponse("获取成功")

注:
F 导包 导入的是 
from django.db.models import F

技术分享图片


F 对象使用 算数表达式

def getgirlgtboy(request):
    companies = Company.objects.filter(c_girl_num__lt=F(c_boy_num)-30)
    # 查看男生比女生多于 30 的
    for company in companies:
        # 进行遍历后查看公司名
        print(company.c_name)
    return HttpResponse("获取成功")

技术分享图片


Q 对象
过滤器的方法中的参数 
常用于 组合条件

表名(models中创建的类) .objects.filter(Q(表中列名__条件=值))

示例:
Student.objects.filter(Q(sage_lt=25))

Q对象支持 | & ~ 

年龄大于等于 25 的
分析: 不小于 25

示例: Student.objects.filter(~Q(sage_lt=25))

Q 对象可以对条件进行封装

封装后支持逻辑运算

与 &
或 |
非 ~

在 urls.py 中进行注册

url(rgetgirlandboy,views.getgirlandboy)
在 models.py 中添加 对应的函数 getgirlandboy

def getgirlandboy(request):
    companies = Company.objects.filter(Q(c_boy_num__gt=90) & Q(c_girl_num__gt=80))
    # 男生大于 90 且 女生大于 80 的公司名称
    for company in companies:
        # 进行遍历后查看公司名
        print(company.c_name)
    return HttpResponse("获取成功")

注:
且  :  Q(条件) & Q(条件) 
取反 : ~Q  表示取反
或 :  Q(条件) | Q(条件)

运行结果

技术分享图片

 

 技术分享图片


2020-05-11

 

Django学习路18_F对象和Q对象

原文:https://www.cnblogs.com/hany-postq473111315/p/12870354.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!