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

Posted

技术标签:

【中文标题】空查询返回数据库中的所有字段。姜戈【英文标题】:Empty query returns all fields from database. Django 【发布时间】:2020-08-05 18:43:39 【问题描述】:

在搜索表单字段中,如果我没有输入任何内容,但按下按钮以搜索查询。查询返回数据库中的每个字段。 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

排除代码无济于事。我相信我在某处犯了简单的错误......因为代码应该可以工作,但不知何故仍然如此。 我只是也试图摆脱 if else 语句,并使用排除语句来查询,例如'',''和 null,然后过滤查询......现在排除对''的查询也不起作用......

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

【问题讨论】:

如果输入为空会发生什么? 只是希望它不返回任何内容或查询名称为“None”的 emty 对象,或者将 '' 替换为 '' 就像 #...对象。 如果我尝试 query=query.replace('', ' ') 然后 django 给我错误 如果我在搜索字段中设置了一次空间,代码会起作用并将用户发送到空对象,但如果我没有在搜索字段中输入任何内容,而只是按下“搜索”,它会给出我数据库中的每个字段... 是的,因为查询是''(空字符串),因此else会被触发,并且每个元素都“包含”空字符串。 【参考方案1】:

如果不输入任何内容,则字符串为空'',如果不传递参数,则为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 % template block [Django-doc]:

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

【讨论】:

谢谢...如果您不介意...我看到每个人都建议使用排除代码和精确代码...为什么它对我不起作用? @bugthefifth:你从哪里看到这个建议? .exclude()用于过滤out满足条件的元素(就像.filter(..)用于过滤in所有满足条件的元素)。 ***.com/questions/844556/… @bugthefifth: 但这意味着如果你想返回name NULLname 的值空字符串'',或者在问题中过滤掉这些。 Willem,感谢您完整高效的回答!

以上是关于空查询返回数据库中的所有字段。姜戈的主要内容,如果未能解决你的问题,请参考以下文章

查询不返回空品牌字段

如果空字段返回所有元素,则在 Django 中查询集

什么基于可空表单字段的访问查询条件将返回我需要的内容?

MyBatis 查询返回数据类型Map,空字段数据不返回

提交空搜索字段时如何停止搜索字段返回所有结果?

姜戈。数据库查询:一个字段不同