2012-06-10 46 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值的给定字段的记录。