我是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绝对是低效的。
有人可以帮我这个吗?如果我清楚地解释清楚或者应该提供更多信息,请告诉我。
您可以使用Q
对象来过滤结果
像下面的东西
from django.db.models import Q
Entry.objects.filter(Q(number=123) | Q(name="abc"))
有更多方法可以使用Q
对象参考the docs。