【问题标题】:Django filter from multiple fields with empty inputDjango从具有空输入的多个字段中过滤
【发布时间】:2018-09-07 04:13:23
【问题描述】:

我是 Django 新手,我现在正在尝试处理基于特定字段的过滤问题。 React.js 用于前端,Django 用作 RESTful API。

对于前端,允许用户选择基于数字或名称的搜索。信息已成功收集。下面的代码只是为了更好的理解,并不完整。

<input type="text" /><label>Search by number</label>
<input type="text" /><label>Search by name</label>

对于后端,响应应根据输入信息(数字或名称)过滤查询集。但是,当我浏览文档时,我注意到对于过滤,应该提供所有过滤字段。

Entry.objects.filter(number=123, name="abc")

如何根据前端给定的信息进行过滤,例如,如果用户选择按 Django 所做的名称搜索:

Entry.objects.filter(number=123)

如果用户选择按名称搜索,那么 Django 会这样做:

Entry.objects.filter(name="abc")

我知道我实际上可以创建两个不同的 API 端点,因此编号和名称不会相互干扰。但是,如果有更多的过滤字段,那么根据每个字段编写每个 API 肯定是低效的。

谁能帮我解决这个问题?如果我解释清楚或应该提供更多信息,请告诉我。

【问题讨论】:

  • 您是希望以相互排斥的方式按numbername 进行过滤,还是用户可以同时按两者进行过滤?

标签: python django reactjs filter


【解决方案1】:

您可以使用Q 对象通过 oring 过滤结果

类似下面的东西

from django.db.models import Q
Entry.objects.filter(Q(number=123) | Q(name="abc"))

还有更多使用Q对象的方法参考the docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 2019-04-23
    • 1970-01-01
    • 2021-06-19
    • 2017-04-08
    • 2011-10-29
    • 2018-10-03
    • 2017-12-03
    相关资源
    最近更新 更多