或者在django数据库查询中

时间:2012-06-10 22:56:37

标签: mysql django django-models django-forms

我有一个包含3个BooleanFields的模型,我想使用复选框表单来查询数据库。输出应该是表的所有条目,其中至少有一个被检查的字段。 现在我有这样的事情:

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的所有课程记录。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

查询:“选择所有课程记录,其中(F为True或H为True或S为True)”

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