【问题标题】:OR in django database queriesOR 在 django 数据库查询中
【发布时间】:2012-06-10 22:56:36
【问题描述】:

我有一个具有 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))

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

【问题讨论】:

  • 这些单字母变量和名称很难阅读。您是想用英语说“所有这些字段为真的所有课程记录”吗?
  • 是的,很抱歉代码不明确

标签: mysql django django-models django-forms


【解决方案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 值的给定字段的记录。

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2018-03-03
    • 1970-01-01
    • 2012-08-16
    • 2012-11-25
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多