【问题标题】:Making sure django model was properly saved确保 django 模型已正确保存
【发布时间】:2013-11-23 00:14:59
【问题描述】:

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

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

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

【问题讨论】:

  • 它更清晰地捕捉异常并从那里放置成功/失败消息。
  • 是的,示例代码应该在视图中。

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


【解决方案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!')

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • TransactionManagementError 是这项工作的正确例外吗?我希望 django 文档能分享一些现实生活中的案例研究...
    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2015-04-14
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多