例如,如果我有一组这样的模型,我怎样才能确保模型中只存在一个具有相同精确Group
个Permission
的{{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
字段关系集的唯一性,而不是单个实例。
答案 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。