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

时间:2016-02-02 11:39:08

标签: python django django-models

例如,如果我有一组这样的模型,我怎样才能确保模型中只存在一个具有相同精确GroupPermission的{​​{1}}个实例?

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中强制执行此约束的最佳方法是什么?我不关心DB级约束。 django是否在ManyToMany模型字段上提供现有标志,还是需要添加自定义数据验证?如果是的话,怎么样?

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

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

1 个答案:

答案 0 :(得分:1)

您可以覆盖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

有关覆盖预定义模型方法的更多信息,请查看docs