zoukankan      html  css  js  c++  java
  • Django学习路18_F对象和Q对象

    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(r'getgirlgtboy',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(r'getgirlandboy',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

  • 相关阅读:
    RMAN动态视图
    无归档模式下的备份
    验证备份集-使用DBVERIFY工具
    手工备份控制文件和参数文件
    针对发起alter tablespace test begin backup 断电情况的处理
    Jenkins一次任务构建中如何处理多个git仓库
    Element-ui Tree组件实现单选
    前端覆盖式发布引发的使用体验提升
    客户端localStorage命名冲突问题
    git 查看和删除分支
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12870354.html
Copyright © 2011-2022 走看看