4

如果它确实一直到数据库,那显然是一个 IntegrityError。但是,如果这是在它进入数据库之前发生的——比如说,在 Manager 类的保存方法中——应该引发什么异常?

例子:

class MyManager(models.Manager):
    def create_from_user(self, user):
        try:
            existing = self.get(user=user)
            raise Exception("There is already an object for this user.") # more specific exception needed
        except self.DoesNotExist:
            # begin creating the record

由于记录的性质,我不希望出现 get_or_create 类型的情况(我希望在记录已经存在时使用此方法是抛出异常的硬错误)。

假设我在我的表上设置了唯一约束,显然最终会抛出一个 IntegrityError ,但我宁愿不依赖它,而是在代码中明确说明。但我不确定哪个例外是最准确的(或者我是否必须自己动手)。

4

2 回答 2

8

我会说这是一个ValidationError. 这就是 Django 在遇到唯一字段上的重复条目时在表单和模型清理方法中抛出的内容。

于 2012-06-29T21:31:05.210 回答
2

为什么不IntegrityError自己扔?从某种意义上说,您的数据库相关代码已经检测到即将发生完整性问题。没有必要编造一个不同的错误/异常来描述已经有名字的东西。

于 2012-06-29T21:23:02.310 回答