空查询返回数据库中的所有字段。姜戈
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
是 NULL
或name
是 的值空字符串''
,或者在问题中过滤掉这些。
Willem,感谢您完整高效的回答!以上是关于空查询返回数据库中的所有字段。姜戈的主要内容,如果未能解决你的问题,请参考以下文章