Python 动态设置或筛选Django queryset中的值

Python 动态设置或筛选Django queryset中的值,python,django,django-queryset,Python,Django,Django Queryset,我知道要在Django中的queryset上执行OR操作,我可以执行以下操作: from django.db.models import Q User.objects.filter(Q(income__gte=5000) | Q(income=0)) User.objects.filter(Q(income__gte=5000) [ONLY IF CONDITION A...] | Q(income=0) [ONLY IF CONDITION B...) | Q(name__contains=

我知道要在Django中的queryset上执行OR操作,我可以执行以下操作:

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))
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...])
q1 = Q()
if conditionA:
    q1 |= Q(income__gte=5000)
if conditionB:
    q1 |= Q(income=0)

User.objects.filter(q1)
现在假设我不想在filter调用中硬编码Q条件,而是想动态地设置它们。也就是说,假设我想做这样的事情:

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))
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...])
q1 = Q()
if conditionA:
    q1 |= Q(income__gte=5000)
if conditionB:
    q1 |= Q(income=0)

User.objects.filter(q1)
换句话说,如果Q对象是一个字符串,我希望在某些条件下附加某些额外的Q对象。这可以表示为:

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

User.objects.filter(q_string)

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

您可以这样做:

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))
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...])
q1 = Q()
if conditionA:
    q1 |= Q(income__gte=5000)
if conditionB:
    q1 |= Q(income=0)

User.objects.filter(q1)