我是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肯定是无效的。
有人可以帮助我吗?请让我知道,如果我解释清楚或应该提供更多信息。
答案 0 :(得分:1)
您可以使用Q
对象通过oring过滤结果
类似以下内容
from django.db.models import Q
Entry.objects.filter(Q(number=123) | Q(name="abc"))
有更多使用Q
对象的方法来引用the docs。