如何将空查询集指定为非空查询集:[] 到 [<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>]的主要内容,如果未能解决你的问题,请参考以下文章