2015-07-10 53 views
0

我想運行一個if條件基於在Django中運行查詢返回的值。Django,如果對象不存在,得到錯誤和查詢集

我要運行的查詢是:

q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)): 

現在,如果Q存在,我想更新Voterlist的投票欄。 否則我想在數據庫中添加該對象。這裏的問題是,如果對象已經存在,即q存在,那麼它運行良好,但如果q不存在,那麼我得到一個500錯誤代碼,並且該查詢不運行。我嘗試使用try塊,我也嘗試使用查詢來執行if語句,但如果q不存在,則無法運行。

回答

1

你有沒有試過除了這樣的嘗試?

try: 
    q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)) 
except (VoterList.DoesNotExist, VoterList.MultipleObjectsReturned): 
    # do something 
    pass 

更新:你必須檢查MultipleObjectsReturned異常以及因多個對象可能是由查詢返回的;取決於你想要怎麼做,在一個或多個try catch塊中;

此外,你可能會更好寫了get查詢集不喜歡這種問答的對象,這是基本相同的事情:

Voterlist.objects.get(voter=request.user, verse=verse) 
+0

我還沒有試過VoterList.DoesNotExist,現在就試試吧 –

+0

謝謝!完美地工作 –

1

你不需要Q對象爲該查詢,只是做:

q = Voterlist.objects.get(voter=request.user, verse=verse) 

和BodgiG建議的那樣,您可以捕獲q返回DoesNotExist的情況。

try: 
    q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)) 
except VoterList.DoesNotExist: 
    # do something 
    pass