2009-12-07 35 views

回答

7

.get()總是返回該對象(如果存在的話)(並且如果只有一個)。如果它不存在,它也會引發異常。例如

blah = MyModel.objects.get(pk=1) 

blah是MyModel的一個實例。 .filter()另一方面不會返回一個錯誤,如果它不存在。

blah = MyModel.objects.filter(pk=1234234234) 

然後blah是一個空的查詢。你可以在blah上調用.count()來檢查它。如果blah.count()== 0意味着與關鍵1234234234.同樣沒有爲MyModel的項目,如果有許多項目與查詢說:

blah = MyModel.objects.filter(name__contains="Brian") 

的你可以interated查詢結果在得到每個結果:

for b in blah: 
     print b.name 

此外,另一個有趣的方法simular來獲得()是.get_or_create()http://www.djangoproject.com/documentation/models/get_or_create/有了這個,你可以說:

blah,created = MyModel.objects.get_or_create(name="Brian Ray", 
              cool=False, 
              fun=True) 

若已是通常使用.get()返回的BrianRay,它只是返回該實例;否則,它會創建它。注意它返回兩件事。第二個只是一個標誌,讓來電者知道實際發生了什麼。

HTH,布賴恩·雷

4

過濾器返回MyModels列表(在本例中爲一個列表)。獲取返回MyModel的一個實例。

順便說一句:您可以通過運行測試這些東西:

manage.py shell 
from myapp import models 

models.MyModel.objects.filter(pk=1) 

models.MyModel.objects.get(pk=1) 

看,它的輸出。

+1

還要注意的是'GET'拋出對象時沒有找到'DoesNotExist'異常並拋出時,有不止一個'MultipleObjectsFound'例外。另一方面,「過濾器」在前一種情況下返回空列表,並明顯處理後一種情況。 – 2009-12-07 23:56:43

相關問題