如何在Django中创建搜索模型

时间:2018-07-13 07:53:31

标签: django django-models

我想创建一个搜索面板。有很多字段需要填写,如果用户不填写某些内容,我想从数据库中为该参数选择所有记录。

我想知道如何在Django模型中执行此操作?在原始MySQL中,这很容易,但我现在不介绍如何设置条件,例如

  

如果用户填写的字段名称,则仅选择此选项,否则,   全选

是否存在针对此类问题的最佳做法?

预先感谢

3 个答案:

答案 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)