2012-06-10 77 views
0

我有一個模型,有3個BooleanFields,我想使用複選框的形式來查詢數據庫。輸出應該是表格的所有條目,其中至少有一個選中的字段爲1。 現在我ahve是這樣的:或在Django的數據庫查詢

f=mform.cleaned_data['F'] 
h=mform.cleaned_data['H'] 
s=mform.cleaned_data['S'] 
course_list=[] 
course_list=Course.objects.filter(Q(F=f)|Q(H=h)|Q(S=s)) 

但是這顯然是不行的,因爲它總是返回所有表。基本上我想獲得所有課程記錄,其中任何一個字段都是True。 任何想法?

+0

這些單字母變量和名稱很難讀取。你是否想用英語「所有課程記錄中的任何一個字段都是真的」? – jdi

+0

是的,抱歉代碼不明確 – leonsas

回答

1

查詢:「選擇所有課程記錄,其中(F是真的還是H是真的還是S是真)」

q_filter = Q() 

if mform.cleaned_data['F']: 
    q_filter |= Q(F=True) 
if mform.cleaned_data['H']: 
    q_filter |= Q(H=True) 
if mform.cleaned_data['S']: 
    q_filter |= Q(S=True) 

if q_filter: 
    course_list = Course.objects.filter(q_filter) 
else: 
    course_list = Course.objects.none() 

這是一個非常基本的方法。它可以在一個更有前途的單線循環中完成,但我想在此澄清。隨着時間的推移你會建立一個Q對象。在你的例子中,你正在篩選的值可能是True或False,而你說你想要的只是過濾具有True值的給定字段的記錄。