我想创建一个搜索面板。有很多字段需要填写,如果用户不填写某些内容,我想从数据库中为该参数选择所有记录。
我想知道如何在Django模型中执行此操作?在原始MySQL中,这很容易,但我现在不介绍如何设置条件,例如
如果用户填写的字段名称,则仅选择此选项,否则, 全选
是否存在针对此类问题的最佳做法?
预先感谢
答案 0 :(得分:2)
让我们以Blogpost
项目为例,在该项目中,我有一个index.html
页面来使用渲染数据。因此,要搜索这些数据,我将使用 Field lookups 。
在此BlogView
中,您可以看到我指定了query
,如果我们在请求中得到q
,则意味着query
不为空,因此它将运行{{1 }}方法中,我可以使用Filter
来指定要查找的内容,例如标题。
不要忘记使用双下划线 icontains
,也称为 dunder
__
答案 1 :(得分:0)
我认为您应该查看django-filter软件包,使用此模块提供搜索字段
答案 2 :(得分:0)
您可以通过创建具有Q
的动态字段查找来实现此目的,如下所示:
from django.db.models import Q
# queryets are lazy. So does not hit do db
queryset = MyModel.objects.all()
query = Q()
for field_name, value in request.POST.items():
if value:
try:
MyModel.get_field(field_name)
except:
# Field does not exist on model
continue
lookup = "{}__icontains".format(field_name)
query |= Q(**{lookup: value})
# query &= Q(**{lookup: value})
queryset = queryset.filter(query)