在 django 模型上,如何检查 ManyToMany 字段中值集中的唯一性



例如,如果我有一组这样的模型,我如何确保模型中只能存在一个具有相同Permission集的Group实例?

class Permission(models.Model):
    name = models.CharField(max_length=100, unique=True)
class Group(models.Model):
    name = models.CharField(max_length=100, unique=True)
    permissions = models.ManyToManyField(Permission)
class User(models.Model):
    name = models.CharField(max_length=100, unique=True)
    group = models.ForeignKey(Group)

在 django 中强制执行此约束的最佳方法是什么?我不在乎数据库级别的约束。django 是否在 ManyToMany 模型字段上提供现有标志,或者我需要添加自定义数据验证?如果是,如何?

此外,我不使用ModelForm,因此表单验证不是我想要的。

我的问题是关于整个模型中一组ManyToMany场关系的唯一性,而不是在单个实例中。

您可以重写Group模型的 save 方法,以便在保存对象之前检查Group唯一性。

例如:

class Group(models.Model):
    ...
    def save(self, *args, **kwargs):
        if insert_your_check_here():
            super(Group, self).save(*args, **kwargs) # Call the "real" save() method.
        else:
            return

有关重写预定义模型方法的详细信息,请查看文档。

最新更新