【问题标题】:Django, if object does not exist, getting error on AND querysetDjango,如果对象不存在,则在 AND 查询集上出现错误
【发布时间】:2015-07-10 11:41:57
【问题描述】:

我想根据在 Django 中运行查询返回的值运行 if 条件。

我要运行的查询是:

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

现在,如果 q 存在,我想更新 Voterlist 的投票列。 否则我想将该对象添加到数据库中。这里的问题是,如果对象已经存在,即 q 存在,那么它运行良好,但如果 q 不存在然后我得到一个 500 错误代码并且该查询不运行。我尝试使用 try 块,也尝试使用查询执行 if 语句,但如果 q 不存在,我无法运行此语句。

【问题讨论】:

    标签: python django django-views django-queryset


    【解决方案1】:

    除了这样,你试过了吗?

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

    更新:您还必须检查 MultipleObjectsReturned 异常,因为该查询可能返回多个对象;取决于你想怎么做,在一个或多个 try catch 块中;

    另外,你最好不要像这样编写没有 Q 对象的 get 查询集,这基本上是一样的:

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

    【讨论】:

    • 我还没试过 VoterList.DoesNotExist,现在试试
    【解决方案2】:

    这个查询不需要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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 2021-10-06
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多