【问题标题】:how to filter with multiple values from checkboxes in Django?如何从 Django 中的复选框中过滤多个值?
【发布时间】:2019-10-05 05:38:04
【问题描述】:

我有这个带有字段的 Patient 模型:company、sex、is_alive...

在患者搜索页面中,我有这些字段的复选框。因此,如果用户想要搜索 company 中的所有 male alive 患者 ...他们将勾选复选框。

然后在后端的views.py中,我收集复选框的值并放入一个名为“value_list”的列表中。接下来,我像这样进行查询搜索:

patient_list = Patient.objects.all()

if "abc" in value_list:
        company = Company.objects.get(name="abc")
        patient_list = patient_list.filter(Q(company=company))

if "alive" in value_list:
        patient_list = patient_list.filter(Q(is_alive=True))

if "male" in value_list:
        patient_list = patient_list.filter(Q(sex=MALE))

我的问题是这种过滤方式是否有效且良好。

请指教。

谢谢。

【问题讨论】:

    标签: django orm


    【解决方案1】:

    在性能方面,一切看起来都很好。您最终将使用此代码执行 1 个查询,因为 Django 足够聪明,知道将它们组合成 1 个使用多个子查询的大型查询。

    话虽如此,您可以使用 __in 子句大大简化此操作,它只是多个 or 条件的简写:

    Patient.objects.filter(company__in=Company.objects.filter(name__in=values_list)))
    

    【讨论】:

    • 谢谢迦勒!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2021-03-23
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多