如何在 Django 中捕获“UNIQUE 约束失败”404

新手上路,请多包涵

我如何在以下代码中专门捕获 UNIQUE 约束失败 404,我知道我必须在(这里?)部分添加一些内容

try:
    q = AnswerModel(user=user, yes_question=question_model)
    q.save()
except ( here? ):
    return HttpResponseRedirect('/user/already_exists')

原文由 Sprig Mendle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 836
2 个回答
from django.db import IntegrityError

except IntegrityError:

这就是你所需要的。

@mbrochh 编辑

 from django.db import IntegrityError

except IntegrityError as e:
    if 'unique constraint' in e.message: # or e.args[0] from Django 1.10
        #do something

是的,您可以更精确,但有问题的情况 UNIQUE failed 很有可能。

原文由 torm 发布,翻译遵循 CC BY-SA 3.0 许可协议

恕我直言,我建议通过 get_or_create() 解决这种情况。

 new_obj, created = AnswerModel.objects.get_or_create(user=user, yes_question=question_model)
if created:
    do_something_for_new_object(new_obj)
else:
    logging.error("Duplicated item.")
    return

原文由 Walter Liu 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏