2011-12-03 53 views
0

我在確定對象的問題,如果它是空的或不... 這裏是我的代碼:如何指定空查詢集不空查詢集:[]至[<object: hi>]

這個值沒有數據

>>> 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 

可有人能幫助我一下嗎? 感謝...

+0

在[前一個問題(http://stackoverflow.com/q/8365090),該問題可能是你使用'如果x:'看,如果列表爲空。然而,一個非空列表是_not_ falsy - 相反,它是非常不真實的,如果列表不是空的,你只會輸入'if'。簡單,快速的解決方案是否定列表:而不是'if x:'write'if'not x:'。不過,下面的@Yuji解決方案看起來好多了,因爲效率更高。請記住否定存在的返回:'if my_queryset.exists():print「empty list」'。 – brandizzi

+0

這和上一個問題實際上只是基本的Python。請去做一個介紹性的Python教程。 –

回答

6

使用exists()

返回true如果查詢集包含任何結果,假如果不是。 這儘可能以最簡單和最快的方式執行查詢,但它確實執行幾乎相同的查詢。這意味着調用QuerySet.exists()的 在很大程度上比bool(some_query_set)快,但不是 。

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

嘗試

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

這應該工作

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

爲什麼-1? (我投票+1補償...)這裏被選爲解決方案:http://stackoverflow.com/questions/1387727/checking-for-empty-queryset-in-django – danihp

+0

@danihp,我猜是因爲'如果! x'不是有效的python(編輯之前) –

+0

@YujiTomita,你怎麼知道這個?他們是在編輯之前看到答案的一種方式?你有預測嗎? ;) – danihp