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

Django 空查询返回数据库中的所有字段。德扬戈,django,Django,在搜索表单字段中,如果我没有输入任何内容,但按下按钮搜索查询。查询返回数据库中的每个字段。 Company.objects.exclude(Q(name\uu isnull=True)).exclude(Q(name\uu exact='') 不知怎么的,这对我没有帮助。如果我一起使用或分开使用。 views.py中的代码是: class className(listView) model=Company template_name='name_of_the_template.h

在搜索表单字段中,如果我没有输入任何内容,但按下按钮搜索查询。查询返回数据库中的每个字段。 Company.objects.exclude(Q(name\uu isnull=True)).exclude(Q(name\uu 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之类的查询使用exclude语句,并在该筛选器之后对查询使用exclude语句。。。现在排除对“”的查询也不起作用


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

如果不输入任何内容,则字符串为空
'
,或者如果未传递任何参数,则字符串为
无。因此,您可以检查
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)

如果输入为空,您到底会发生什么?只是希望它不返回任何内容或查询名为“None”的emty对象,或者像对#一样将“”替换为“”。。。然后我将“”查询发送到空对象。如果我尝试query=query.replace(“”“”),django会给我错误信息如果我在搜索字段中设置了一次空格,代码会工作并将用户发送到空对象,但如果我没有在搜索字段中输入任何内容,只需按下“搜索”,它给了我数据库中的每个字段…是的,因为查询是
'
(空字符串),因此将触发
else
,并且每个元素“包含”空字符串。谢谢。。。如果你不介意的话。。。我看到每个人都建议使用排除代码和精确代码。。。为什么它对我不起作用?@bugthefifth:你从哪里看到这个建议的
.exclude()
用于过滤掉满足条件的元素(就像
一样。filter(..)
用于过滤所有满足条件的元素)。@bugthefifth:但这意味着如果要返回
name
NULL
的值,或者
name
为空字符串
'
,或者像问题一样,过滤掉这些。威廉,谢谢你完整而有效的回答!
{% for object in object_list %}
    {{ object }}
{% empty %}
    no objects found!
{% endfor %}