如何检查外键是否是同一模型中多对多的一部分?

时间:2012-02-23 12:33:44

标签: django django-models

以下是我的模型的简化版本:

class Group(models.Model):
    creator = models.ForeignKey(User, related_name='group_creator')
    members = models.ManyToManyField(User, through='Membership')

    def clean(self):
        if self.creator not in self.members.all():
            raise ValidationError('Creator should be part of this group.')

当我在我的模型的新实例上执行full_clean()时,它会引发此异常。

ValueError: 'Group' instance needs to have a primary key value before a many-to-many relationship can be used.

我知道它来自我的clean()方法,但我无法弄清楚为什么会出现这个错误。我看到人们和我有同样的麻烦,但从来没有在他们自己的模型中。

知道如何解决这个问题吗? 我知道,为我的英语道歉,这很糟糕。也许这就是为什么我无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

当对象尚未保存时,您无法检查self.members.all()。它需要一个主键才能在连接表中查找与自身的关系。

您应该检查的是self.cleaned_data['members']