獲取單個(gè)對(duì)象
上面的例子中filter()
函數(shù)返回一個(gè)記錄集活玲,這個(gè)記錄集是一個(gè)列表。相對(duì)列表來(lái)說(shuō)啡浊,有些時(shí)候我們更需要獲取單個(gè)的對(duì)象肪凛, get()
方法就是在此時(shí)使用的:
Publisher.objects.get(name="Apress")
<Publisher: Apress>
這樣,就返回了單個(gè)對(duì)象杭措,而不是列表(更準(zhǔn)確的說(shuō)费什,QuerySet)。 所以手素,如果結(jié)果是多個(gè)對(duì)象鸳址,會(huì)導(dǎo)致拋出異常:
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.'}
如果查詢(xún)沒(méi)有返回結(jié)果也會(huì)拋出異常:
Publisher.objects.get(name="Penguin")
Traceback (most recent call last):
...
DoesNotExist: Publisher matching query does not exist.
這個(gè) DoesNotExist 異常 是 Publisher 這個(gè) model 類(lèi)的一個(gè)屬性,即 Publisher.DoesNotExist泉懦。在你的應(yīng)用中稿黍,你可以捕獲并處理這個(gè)異常,像這樣:
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."