Django:在提出异常之前保存其他对象

时间:2015-07-24 19:59:34

标签: python django exception error-handling exception-handling

我试图在我的Django类中做一个简单的错误报告系统,但如果我引发ValidationError,我无法保存一个新对象(来自另一个类)。

以下是我想要做的一个例子:

from django.db import models
from django.core.exceptions import ValidationError

class History(models.Model):
    data = models.CharField(max_length=255)
    timestamp = models.DateTimeField(auto_now_add=True)

class PositiveNumber(models.Model):
    number = models.IntegerField()

    def save(self, *args, **kwargs):
        if self.number < 0:
            h = History(data="Error writing %d into 'Positive Numbers'" % (self.number,))
            h.save()         # Here is the problem: h doesn't get saved
            raise ValidationError('Positive numbers only')
        else:
            h = History(data="Saved %d into 'Positive Numbers'" % (self.number,))
            h.save()
        return super(PositiveNumber, self).save(*args, **kwargs)

问题在于,如果我提出异常,即使在我执行 h.save()之后它已经上升,h也不会被保存。

这很有意义,因为Django 如此智能如果出现错误,不应该让你提交数据库,但我无法在文档中找到任何地方在哪里我可以覆盖这个以处理这种特定情况。

......或者我可能只是在概念上错了,我必须在其他地方处理这个问题(我试图建立一个强大的系统,其他人可以为它编写代码,所以它应该是故障安全)。

0 个答案:

没有答案