当只允许一条记录时尝试创建Django记录时,正确的异常是什么

Jor*_*ter 3 django exception

如果它确实一直到数据库,它显然是一个IntegrityError.但是,如果它进入数据库之前发生了这种情况- 例如,在Manager类的save方法中 - 什么是引发的正确异常?

例:

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
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*man 6

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