确保django模型已正确保存
当使用django模型的save方法保存模型时,有没有办法确保在保存过程中没有发生任何事情,并向用户发送消息?我正在考虑消息框架,并尝试除块确保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
try:
model.save()
add success message to message framework
except DatabaseError:
add error message to message framework
except TransactionManagementError:
add error message
这是正确的方法吗?另外,在尝试保存模型的新实例时,哪种异常更可能出现?我对django非常陌生,所以请注意:)您通常希望将其分为两个问题:
- 内容问题,即您尝试在数据库中保存同一行两次,从而触发由数据库约束引起的错误。这将引发可捕获的
。请参阅:(Django 1.6+还有一些错误)。您可能应该捕获这些信息,并使用类似于IntegrityError
的内容通知用户messages.error
- 数据库已关闭或存在其他严重问题。您可能应该避免捕捉错误,让django为您处理,并显示自己的500页,直到db重新联机。见:和
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是否共享了一些实际案例研究。。。