2011-09-27 201 views
1

我有一个模型,我需要根据不同的条件进行过滤。我想避免编写复杂的嵌套条件,并将模型过滤器应用于每种情况。django模型过滤器问题

反正是有串联或参数组合过滤器()到一个变量,然后把该变量为一组过滤器参数是这样?:

db_table.objects.filter(variable_of_arguments) 

等于:

db_table.objects.filter(
    (Q(first_name__icontains=search) | 
    Q(last_name__icontains=search)), 
    foo = True) 

回答

1

我不知道,但可能是你可以用2个参数做到这一点:

param1 = Q(first_name__icontains=search) | Q(last_name__icontains=search)) 
param2 = {'foo', False} 

db_table.objects.filter(param1, **param2) 
1

您可以建立的参数个数可变,并通过它们如下:

q = Q(first_name__icontains=search) | Q(last_name__icontains=search) 
p = Q(first_in_line=True) | Q(last_in_line=True) 

args = [q, p] 

kwargs = { 
    'foo': True 
    'bar': False 
} 

db_table.objects.filter(*args, **kwargs) 
# Equivalent to: 
# 
# db_table.objects.filter(
# Q(first_name__icontains=search) | Q(last_name__icontains=search), 
# Q(first_in_line=True) | Q(last_in_line=True), 
# foo=True, 
# bar=False 
#) 

现在你可以使用你想建立argskwargs和调用filter()将始终是相同的任何逻辑。