我从这里知道要在 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)
但是进入过滤器的东西实际上不能是字符串,所以这行不通。我应该怎么做?