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

      

  • 相关阅读:
    定位 frame 中的对象
    层级定位
    定位一组对象find_elements
    设置等待时间
    selenium python的使用(一)
    selenium python 安装
    Linux 用户管理(2)
    Linux 用户管理(1) (/etc/passwd)
    U盘在电脑上安装CentOS 7 系统过程详解
    vi编辑文件保存后,提示“Can't open file for writing Press ENTER or type command to continue”
  • 原文地址:https://www.cnblogs.com/dorian/p/12432869.html
Copyright © 2011-2022 走看看