Django,如果对象不存在,则在 AND 查询集上出错

Django, if object does not exist, getting error on AND queryset

我想 运行 基于 运行Django 查询返回值的 if 条件。

我想要运行的查询是:

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

现在,如果 q 存在,我想更新 Voterlist 的投票栏。 否则我想将该对象添加到数据库中。这里的问题是,如果对象已经存在,即 q 存在,那么它 运行 没问题,但是如果 q 不存在然后我得到一个 500 错误代码并且该查询不 运行。我尝试使用 try 块,我也尝试使用查询执行 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 returns DoesNotExist 的情况。

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