确保django模型得到妥善保存

时间:2013-11-11 08:50:44

标签: django django-models exception-handling django-messages

使用它保存django模型的保存方法是否有任何方法可以确保在保存期间没有发生任何事情并向用户发送消息?我正在考虑消息框架并尝试除了阻止?

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

这是正确的方法吗?在尝试保存模型的新实例时,更有可能引发哪种异常?我对django很新,所以要善良:)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我的方法是使用我所有模型扩展的基本抽象模型,并在其中覆盖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!')