0

我从这里知道要在 Django 中对查询集执行 OR 操作,我可以执行以下操作:

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))

现在假设我不想在过滤器调用中对 Q 条件进行硬编码,而是要动态设置它们。也就是说,假设我想做这样的事情:

User.objects.filter(Q(income__gte=5000) [ONLY IF CONDITION A...] | Q(income=0) [ONLY IF CONDITION B...) | Q(name__contains="blah") [ONLY IF CONDITION C...])

换句话说,如果 Q 对象是一个字符串,我想在某些条件下附加某些额外的 Q 对象。这可能表示为:

q_string = ""
if conditionA:
    q_string += Q(income__gte=5000)
if conditionB:
    q_string = Q(income=0)

User.objects.filter(q_string)

但是进入过滤器的东西实际上不能是字符串,所以这行不通。我应该怎么做?

4

2 回答 2

0

你可以这样做:

q1 = Q()
if conditionA:
    q1 |= Q(income__gte=5000)
if conditionB:
    q1 |= Q(income=0)

User.objects.filter(q1)
于 2013-05-20T21:00:53.847 回答
-1
query_string = ""
if conditionA:
    query_string += Q(income__gte=5000)
if conditionB:
    query_string = Q(income=0)

User.objects.filter(query_string)
于 2017-11-20T06:34:54.563 回答