我想在Django中运行一个基于查询返回值的if条件。
我想运行的查询是:
q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse)):
现在,如果q存在,我想更新Voterlist的投票列。否则我想把对象添加到数据库中。这里的问题是,如果对象已经存在,也就是q存在,那么它运行得很好,但是如果q不存在,那么我得到一个500的错误代码,查询不会运行。我尝试使用一个尝试块,我也尝试使用查询做一个if语句,但我无法运行这个,如果q不存在。
你试过除了这样的尝试吗?
try:
q = Voterlist.objects.get(Q(voter=request.user),Q(verse=verse))
except (VoterList.DoesNotExist, VoterList.MultipleObjectsReturned):
# do something
pass
update:你必须检查MultipleObjectsReturned异常,因为该查询可能返回多个对象;这取决于你想怎么做,在一个或多个try catch块中;
同样,您最好编写没有Q对象的get查询集,就像这样,基本上是一样的:
Voterlist.objects.get(voter=request.user, verse=verse)
这个查询不需要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