如何在django中指定对象中的值:is []不等于None?

时间:2011-12-03 02:48:48

标签: python django django-queryset if-statement

如果它具有此值[]或具有[<Booking: arab>],我如何在python中指定或确定我的对象中的值, 让我们说在我的查询集中,我过滤了我的对象中不存在的值。

这就是我所做的:这个date_select没有数据

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

[]不等于None? 当我尝试一个有数据的date_select时

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

我只是想确定x是否有数据...... 谁能让我对我的案子有所了解?

提前致谢

3 个答案:

答案 0 :(得分:3)

不,[]不等于None[]是一个空列表 - 一个没有内容但仍然存在的列表,可以有一些元素。 None是一个表示“无”的值 - 当您找到None值时,会显示类似“此变量没有相关内容”的内容。由于空列表可以是相关内容 - 例如,空列表可以是列表的初始状态,该列表将随时间累积元素 - 然后假设[] == None没有任何意义。

armonge给出了响应:只使用列表作为条件,因为空列表是“假的” - 也就是说,当用作{{1}的条件时,空列表具有相同的False效果}},if等。如果你想在列表有某些内容时执行某些内容,只需否定它:

while
BTW,一个问题:你习惯用Lisp编程吗?这是唯一一种空列表等同于“无类型”的语言(在本例中为if not x: print 'empty list (is not None)' )。

答案 1 :(得分:3)

如果您想知道您的查询集是否返回了任何结果,请调用exists方法。

x = Booking.objects.filter(date_select='2011-12-3')
if x.exists():
   # There are some results from this query set

如果您想知道有多少项,可以使用count

x = Booking.objects.filter(date_select='2011-12-3')
print x.count()

答案 2 :(得分:2)

你只需要

if queryset:
    print 'not empty'