使用它保存django模型的保存方法是否有任何方法可以确保在保存期间没有发生任何事情并向用户发送消息?我正在考虑消息框架并尝试除了阻止?
try:
model.save()
add success message to message framework
except DatabaseError:
add error message to message framework
except TransactionManagementError:
add error message
这是正确的方法吗?在尝试保存模型的新实例时,更有可能引发哪种异常?我对django很新,所以要善良:)
答案 0 :(得分:1)
您通常希望将此分为两个问题:
IntegrityError
。请参阅:https://docs.djangoproject.com/en/dev/ref/exceptions/#database-exceptions(Django 1.6+有更多错误)。您应该抓住这些并使用类似messages.error
的内容来通知用户。答案 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!')