空查询返回数据库中的所有字段。Django

最后发布: 2020-08-03


问题

在搜索表单字段中,如果我不输入任何内容,而是按下按钮进行搜索查询。查询从数据库中返回每一个字段。 Company.objects.exclude(Q(name__isnull=True)).exclude(Q(name__exact=''))不知为何,对我没有帮助。如果我把它们一起使用或分开使用。views.py中的代码是。

class className(listView)
    model=Company
    template_name='name_of_the_template.html'

    def get_queryset(self):
        query=self.request.Get.get('q')
        query=query.replace('#',' ') //same for ?\/$%^+*()[] *tried to set exclude code here

        if query == ' ':
            object_list = Company.objects.filter(Q(name__icontains='None'))//sending to the empty object
            return object_list
    else:
        // *tried to set exclude code here
            object_list = Company.objects.filter(Q(name__icontains=query))
            return object_list

所有的exclude代码都没有帮助。我相信我做了简单的错误的地方... ...因为代码应该工作,但不知何故仍然.我只是也试图摆脱if else语句和使用排除语句的查询,如'',''和null,然后过滤查询... ...。现在排除'''的查询也不行了......

Django并没有告诉我排除不工作,所有的工作,除了,它就像没有在代码中。

django view exclude
回答

如果你什么都不输入,那么这个字符串就是空的。''或它是 None 如果没有传递参数。因此,您可以检查 真实性query然而,你可能最好先 .strip() 字符串来删除任何前导或尾部的空格。

def get_queryset(self):
    query = self.request.Get.get('q')
    if query is not None:
        query = query.replace('#',' ')
        query = query.strip()
    if not query:
        return Company.objects.none()
    else:
        return Company.objects.filter(name__icontains=query)

在模板中,你可以使用 {% for … %}…{% empty %}…{% endfor %} 模板块[Django-doc]:

{% for object in object_list %}
    {{ object }}
{% empty %}
    no objects found!
{% endfor %}