在Django中,以多对多关系强制实施至少一个值?

时间:2012-05-07 10:14:45

标签: django orm

我在Django(1.4)模型中有多对多的关系。

class UserProfile(models.Model):
    foos = models.ManyToManyField(Foo)

我想强制每个用户(个人资料)至少有一个Foo。 Foos可以有零个或多个用户(配置文件)s。

我希望在模型和管理员级别强制执行此操作,但只需在管理员中强制执行即可。

如果我理解正确,Django-speak中的'many'是零或更多。

我想要一个ManyToOneOrMore关系。我怎么能这样做?

谢谢,

克里斯。

2 个答案:

答案 0 :(得分:7)

不幸的是,我不认为这在模型级别是可行的,因为ManyToMany数据与其他模型字段分开保存。您应该能够通过指定自定义表单并在表单上编写clean()方法在管理员级别强制执行它。

答案 1 :(得分:5)

您不能在模型级别强制执行此操作作为@Greg详细信息,但您可以通过简单地创建所需的字段来在表单上强制执行此操作。这不会阻止任何具有shell级别访问权限的人在没有foo的情况下手动创建UserProfile,但它会强制任何人使用基于浏览器的表单创建方法。