如何将空查询集指定为非空查询集:[] 到 [<object: hi>]

Posted

技术标签:

【中文标题】如何将空查询集指定为非空查询集:[] 到 [<object: hi>]【英文标题】:how to specify empty queryset to not empty queryset : [ ] to [<object: hi>] 【发布时间】:2012-01-12 00:13:28 【问题描述】:

我在确定对象是否为空时遇到问题... 这是我的代码:

这个值没有数据

>>> x = Booking.objects.filter(date_select='2011-12-3')
>>> print x
[]
>>> if x == None:
...  print 'none'
... 
>>> 

这有一个数据:

>>> x = Booking.objects.filter(date_select='2011-12-2')
>>> print x
[<Booking: arab>, <Booking: arab>, <Booking: vvv>]
>>> if x == None:
...  print 'none'
... 
>>>

我从上一个问题中了解到[] 不等于None... 这是我想在我的代码中应用的算法:

if x has an empty queryset
 print empy
else
 print data

谁能帮我解决这个问题? 谢谢...

【问题讨论】:

在previous question 中,问题可能是您使用if x: 来查看列表是否为空。但是,非空列表不是 虚假的——相反,它是真实的,如果列表不为空,您只会输入if。简单、快速的'n'dirty 解决方案是否定列表:而不是if x:if not x:。但是,下面的@Yuji 解决方案似乎要好得多,因为效率更高。只要记住否定存在的返回:if my_queryset.exists(): print "empty list". 这个问题和上一个问题实际上只是基本的 Python。请去做一个 Python 入门教程。 【参考方案1】:

使用exists()

如果 QuerySet 包含任何结果,则返回 True,否则返回 False。 这试图以最简单和最快的方式执行查询 可能,但它确实执行几乎相同的查询。这意味着 调用 QuerySet.exists() 比 bool(some_query_set) 快,但不是 在很大程度上。

if my_queryset.exists():
    print "QuerySet has Data"
else:
    print "QuerySet is empty"

【讨论】:

【参考方案2】:

这应该可以工作

if not x:
    print "Empty"
else:
    print data`

【讨论】:

为什么是-1? (我投票+1来补偿......)这里被选为解决方案:***.com/questions/1387727/… @danihp,我猜是因为if ! x 不是有效的python(编辑前) @YujiTomita,你怎么知道的?它们是在编辑之前查看答案的一种方式吗?你有预感吗? ;) @danihp - 您可以通过单击 edited X hours ago 链接查看编辑:***.com/posts/8365278/revisions @YujiTomita,谢谢。你知道是否有办法查看已删除的答案吗?【参考方案3】:

试试

x = Booking.objects.filter(date_select='2011-12-2')
if x.count() == 0:
    print "empty"

【讨论】:

以上是关于如何将空查询集指定为非空查询集:[] 到 [<object: hi>]的主要内容,如果未能解决你的问题,请参考以下文章

php查询

如何在 Laravel 中查询具有精确指定关系的数据集?

access中查询出来值的为空,如何将空值改为0,具体表达式是啥,从啥地方输入表达式,多谢

实例化内联表单集时指定查询集

在union的时候怎么强制指定数据类型

在 Django 中,如何优雅地将查询集过滤器添加到大型组或对象的所有成员?