django中的filter和get的區別 (MultipleObjectsReturned: get() returned more than one Publisher --)(DoesNotExist: Publisher matching query does not exist.)


上面的例子中`` filter()`` 函數返回一個記錄集,這個記錄集是一個列表。 相對列表來說,有些時候我們更需要獲取單個的對象, `` get()`` 方法就是在此時使用的:

>>> Publisher.objects.get(name="Apress")
<Publisher: Apress>

這樣,就返回了單個對象,而不是列表(更准確的說,QuerySet)。 所以,如果結果是多個對象,會導致拋出異常:

>>> Publisher.objects.get(country="U.S.A.")
Traceback (most recent call last):
    ...
MultipleObjectsReturned: get() returned more than one Publisher --
    it returned 2! Lookup parameters were {'country': 'U.S.A.'}

如果查詢沒有返回結果也會拋出異常:

>>> Publisher.objects.get(name="Penguin")
Traceback (most recent call last):
    ...
DoesNotExist: Publisher matching query does not exist.

這個 DoesNotExist 異常 是 Publisher 這個 model 類的一個屬性,即 Publisher.DoesNotExist。在你的應用中,你可以捕獲並處理這個異常,像這樣:

try:
    p = Publisher.objects.get(name='Apress')
except Publisher.DoesNotExist:
    print "Apress isn't in the database yet."
else:
    print "Apress is in the database."

 

1.django的get方法是從數據庫的取得一個匹配的結果,返回一個對象,如果記錄不存在的話,它會報錯。

 

3.django的filter方法是從數據庫的取得匹配的結果,返回一個對象列表,如果記錄不存在的話,它會返回[]。

4.如果你用django的get去取得關聯表的數據的話,無論關聯表有多少記錄的都不會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM