2013-10-15 94 views
0

這裏每個對象的一些值是代碼:檢查多的一個屬性包含在查詢集

querySet = dataModel.objects.all() 
#assume the existance of a valid data model 'dataModel', assume it has a valid attribute 'attribute' 

if all(object.attribute == '3' or object.attribute == '4' or object.attribute == '5' for object in querySet): 
    #Do something 
else: 
    #Do somthing else 

當我加載網頁,我得到如下:

Exception Value: global name 'all' is not defined 

更多信息:

Django的版本:1.3.1

我想檢查是否在中的每個對象的屬性值爲3,4或5.請指教。謝謝。

+0

如何使用'filter'?此外,我不認爲「全部」方式的作用,「全部」都需要一次迭代,並檢查每個成員是否真實存在 – dm03514

+0

真實代碼中存在過濾器,但我無法在此處顯示有關隱私問題的代碼。這對於被問到的問題應該沒有什麼不同。如果有,請詳細說明。謝謝 –

+0

那麼你究竟如何解決這個問題?我試圖檢查查詢集中的每個對象是否具有3,4或5的屬性值。 –

回答

0

錯誤的語法!

試着這麼做:

 

if dataModel.objects.exclude(attribute__in=[3,4,5]).exists(): 
    # we have objects in queryset that have attribute different than 3,4,5 
else: 
    # all objects have attribute equal to 3,4 or 5 

2

的錯誤是,all expects an iterable as a parameter,並且它得到別的東西。

試試這個:

if all([object for object in querySet if object.attribute == '3' or object.attribute == '4' or object.attribute == '5' ]): 
    #Do something 

在我看來,不過 - 這是all()

錯誤用法考慮使用:

querySet = dataModel.objects.filter(attribute__in=[3, 4, 5]) 

if queryset.count(): 
    #do something 
+0

'嘗試此'建議輸出相同的錯誤。我可以調查你的第二個建議,但'如果queryset.count():'是什麼意思?這是否意味着「如果有屬性值爲3,4或5做某事的對象」? –

+0

是的,這是正確的。這是什麼意思 – karthikr

+0

做到了這一點?因此,請記住[答案已被接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – karthikr