基于通过类的Django ManyRelatedManager过滤

时间:2010-10-15 15:22:39

标签: django django-orm

我有一个简单的多对多关系,基于整个班级。

class Person(models.Model):
    friends = models.ManyToManyField('self', through='Friendship')

class Friendship(models.Model):
    me = models.ForeignKey(Person)
    them = models.ForeignKey(Person)
    confirmed = models.BooleanField(default=False)

简而言之,这应该允许某人将其他人添加为朋友,但在其他人确认之前该链接不存在。很简单。

我想向is_friend(self, user)添加Person方法。我想做的事情是:

is_friend(self, user):
    return self.friends.filter(them=user, confirmed=True).count()

但是filter似乎只对遥远的班级(在这种情况下是Person)进行操作。在使用Friendship时,我是否可以在ManyRelatedManager上过滤?

2 个答案:

答案 0 :(得分:2)

我有点生疏,但你试过return Friendship.objects.filter(me=self, them=user, confirmed=True)吗?

答案 1 :(得分:1)

你试过了吗?

is_friend(self, user):
    return self.friends.filter(friendship__them=user, friendship__confirmed=True).count()