【问题标题】:On a django model, how to check uniqueness in the set of values in a ManyToMany field?在 django 模型上,如何检查 ManyToMany 字段中值集的唯一性?
【发布时间】:2016-02-02 11:39:08
【问题描述】:

例如,如果我有一组这样的模型,我如何确保模型中只有一个具有完全相同的Permissions 集的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 模型字段上提供现有标志,或者我需要添加自定义数据验证?如果是,如何?

另外我不使用ModelForms,所以表单验证不是我想要的。

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

【问题讨论】:

  • @doru 不,这个问题不一样。因为接受的答案假设我想要的是 Django 中的默认行为,但事实并非如此。我的问题是关于整个模型中 ManyToMany 字段关系集的唯一性,而不是在单个实例中。

标签: python django django-models


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    相关资源
    最近更新 更多