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')
    

      

  • 相关阅读:
    python之路day10命名空间和作用域、函数嵌套,作用域链、闭包
    20200719 千锤百炼软工人第十四天
    20200720 千锤百炼软工人第十五 天
    JavaScript中基本数据类型和引用数据类型的区别
    js 经纬度坐标格式化 度分秒转度 度转度分秒
    export ,export default 和 import 区别 以及用法
    10月28日学习日志
    10月20日学习日志
    10月29日学习日志
    10月27日学习日志
  • 原文地址:https://www.cnblogs.com/dorian/p/12432869.html
Copyright © 2011-2022 走看看