2013-05-20 80 views
0

我从here知道,就在Django一个QuerySet执行或操作,我可以做这样的事情:动态设置或者Django的过滤器值的查询集

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

你可以做这样的事情:

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

User.objects.filter(q1) 
-1
query_string = "" 
if conditionA: 
    query_string += Q(income__gte=5000) 
if conditionB: 
    query_string = Q(income=0) 

User.objects.filter(query_string)