在Django queryset中动态设置OR过滤器值

时间:2013-05-20 20:56:33

标签: python django django-queryset

我从here知道要对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)

但是进入过滤器的东西实际上不是一个字符串,所以这不起作用。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

您可以这样做:

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

User.objects.filter(q1)

答案 1 :(得分:-1)

JavaScript runtime error: Object doesn't support property or method 'get'
相关问题