2015-07-10 35 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