0

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

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))

但这显然不起作用,因为它总是返回所有表格。基本上,我想获取所有这些字段为真的所有课程记录。有任何想法吗?

4

1 回答 1

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

于 2012-06-10T23:14:33.137 回答