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

      

  • 相关阅读:
    【文学文娱】《屌丝逆袭》-出任CEO、迎娶白富美、走上人生巅峰
    天纵英才-阿里巴巴《马云》
    我的《大宋王朝》
    《1024 程序员节》—我喂自己袋盐
    【文学文娱】《失控》读后感
    《由河南人--首富许家印说起》
    《将博客搬至CSDN》
    【置顶】技术每天一点点--2017.09-2018.10月
    saltstack的简单搭建
    rabbitMQ基础应用
  • 原文地址:https://www.cnblogs.com/dorian/p/12432869.html
Copyright © 2011-2022 走看看