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

  

  

猜你喜欢

转载自www.cnblogs.com/dorian/p/12432869.html