例如,如果我有一组这样的模型,我如何确保模型中只能存在一个具有相同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
有关重写预定义模型方法的详细信息,请查看文档。