确保django模型已正确保存

确保django模型已正确保存,django,django-models,exception-handling,django-messages,Django,Django Models,Exception Handling,Django Messages,当使用django模型的save方法保存模型时,有没有办法确保在保存过程中没有发生任何事情,并向用户发送消息?我正在考虑消息框架,并尝试除块 try: model.save() add success message to message framework except DatabaseError: add error message to message framework except TransactionManagementError: add erro

当使用django模型的save方法保存模型时,有没有办法确保在保存过程中没有发生任何事情,并向用户发送消息?我正在考虑消息框架,并尝试除块

try:
    model.save()
    add success message to message framework
except DatabaseError:
    add error message to message framework
except TransactionManagementError:
    add error message

这是正确的方法吗?另外,在尝试保存模型的新实例时,哪种异常更可能出现?我对django非常陌生,所以请注意:)

您通常希望将其分为两个问题:

  • 内容问题,即您尝试在数据库中保存同一行两次,从而触发由数据库约束引起的错误。这将引发可捕获的
    IntegrityError
    。请参阅:(Django 1.6+还有一些错误)。您可能应该捕获这些信息,并使用类似于
    messages.error
    的内容通知用户
  • 数据库已关闭或存在其他严重问题。您可能应该避免捕捉错误,让django为您处理,并显示自己的500页,直到db重新联机。见:和

我的方法是使用一个基本抽象模型,我的所有模型都扩展了该模型,在该模型中,我覆盖了save方法,以便捕获异常和回滚事务:

class AbstractModel(models.Model):
    class Meta:
        abstract = True

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        try:
            super(AbstractModel, self).save(force_insert, force_update, using, update_fields)
        except IntegrityError as saveException:
            logger.exception('Rolling back transaction due to an error while saving %s...' % self.__class__.__name__)
            try:
                transaction.rollback()
            except Exception as rollbackException:
                logger.exception('Unable to rollback!')

捕获视图中的异常并将成功/失败消息放在视图中更为简洁。是的,示例代码应该在视图中。TransactionManagementError是否是此作业的正确异常?我想知道django docs是否共享了一些实际案例研究。。。