我从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)
但是进入过滤器的东西实际上不是一个字符串,所以这不起作用。我该怎么做呢?
答案 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'