Django从多个字段过滤输入为空

时间:2018-09-07 04:13:23

标签: python django reactjs filter

我是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肯定是无效的。

有人可以帮助我吗?请让我知道,如果我解释清楚或应该提供更多信息。

1 个答案:

答案 0 :(得分:1)

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

类似以下内容

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

有更多使用Q对象的方法来引用the docs