如何在django中创建搜索模型



我想创建一个搜索面板。将有许多字段需要填写,若用户并没有填写某些内容,我想从数据库中选择该参数的所有记录。

我想知道如何在django模型中做到这一点?在原始MySQL中,这很容易,但我现在不知道如何设置条件,例如

如果用户填写了字段名称,请仅选择此选项,否则,选择所有

是否有解决此类问题的最佳实践?

提前感谢

让我们以Blogpost项目为例,在该项目中,我有一个index.html页面,可以使用来呈现我的数据。因此,为了在该数据中进行搜索,我将使用字段查找

在这个BlogView中,你可以看到我指定了query,其中如果我们在请求中得到q,则意味着query不为空,因此它将运行Filter方法,使用icontains,我可以要求指定要查找的内容,例如在我的情况下的标题。

不要忘记使用Double Undercore__,也称为dunder

def BlogView(request):
query = request.GET.get("q", None)
blog = PostModel.objects.all()
if query is not None:
blog = blog.filter(
Q(title__icontains=query) |
Q(content__icontains=query) 
)
context = {
"queryset": blog,
}
template = 'blog/index.html'
return render(request, template, context)

我认为你应该看看django过滤器包,使用这个模块来提供你的搜索字段

您可以通过使用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)

最新更新