上面的例子中`` 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去取得關聯表的數據的話,無論關聯表有多少記錄的都不會報錯。