zoukankan      html  css  js  c++  java
  • 0047 Q函数的使用

      Django的组合查询,一般使用Q函数。

    1 引用Q函数

    from django.db.models import Q
    

    2 支持& (and)、| (or)、~(not)操作符

    Asset.objects.get(
        Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
        question__startswith='Who'
    )
    Asset.objects.get(
        Q(pub_date=date(2005, 5, 2)) | ~Q(pub_date=date(2005, 5, 6)),
        question__startswith='Who'
    )
    Asset.objects.get(
        Q(pub_date=date(2005, 5, 2)) & Q(pub_date=date(2005, 5, 6)),
        question__startswith='Who'
    )
    

    3 复杂分级条件

    join_orgs = models.UserOrg.objects.filter(Q(user=user), ~Q(active=2) & ~Q(active=9))  # 得到已经加入过的组织
    q1 = ~Q()  # 我加入的组织不包括在内
    q1.connector = 'OR'
    for item in join_orgs:
        q1.children.append(('id', item.org.id))
    q2 = Q()  # 所有未注销的组织
    q2.connector = 'AND'
    q2.children.append(('active', 1))
    
    q = Q()  # 所有未注销的组织中,除了我加入的组织,其余全部列出
    q.connector = 'AND',
    q.add(q1, 'AND')
    q.add(q2, 'AND')
    org_objs = models.Organization.objects.filter(q) 
    
    q1 = Q()
    q1.connector = 'OR'
    q1.children.append(('authority_manager_id',27))
    q1.children.append(('authority_manager_id',23))
    q1.children.append(('authority_manager_id',24))
    q1.children.append(('authority_manager_id',25))
    q1.children.append(('authority_manager_id',16))
    q1.children.append(('authority_manager_id',26))
    q1.children.append(('authority_manager_id',18))
    q1.children.append(('authority_manager_id',19))
    q1.children.append(('authority_manager_id',20))
    q1.children.append(('authority_manager_id',21))
    q1.children.append(('authority_manager_id',22))
    q2 = ~Q()
    q2.connector = 'AND'
    q2.children.append(('granted',0))
    q3 = Q()
    q3.connector = 'AND'
    q3.children.append(('role_id',role_id))
    q = Q()
    q.connector='AND'
    q.add(q1,'AND')
    q.add(q2,'AND')
    q.add(q3,'AND')
    

      

  • 相关阅读:
    Windows服务的删除与添加
    综合布线施工规范与工艺
    电表产品型号代表什么意义?
    网线接线顺序
    电机绝缘电阻的测量方法
    实用电工口诀
    电工需熟知应用口诀-巧用低压验电笔
    各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)
    C# 开启线程的几种方式
    C# 内置的类型转换方法
  • 原文地址:https://www.cnblogs.com/dorian/p/12432869.html
Copyright © 2011-2022 走看看