2011-09-27 155 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()將始終是相同的任何邏輯。