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

      

  • 相关阅读:
    清明节实现所有网页变灰色
    点击按钮,复制文本
    Matlab笔记
    spring框架中配置mysql8.0需要注意的地方(转载)
    移动吉比特H2-2光猫超级用户与密码
    JS关闭chorme页面
    MATLAB利用solve函数解多元一次方程组
    微信聊天记录导出为csv,并生成词云图
    fmt.Sprintf(格式化输出)
    iris,context源码分析
  • 原文地址:https://www.cnblogs.com/dorian/p/12432869.html
Copyright © 2020-2023  润新知