我有一个简单的基于through类的多对多关系。Django ManyRelatedManager基于through类的过滤
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
?
我,是的,这工作...我只是希望提供一个“穿越”类来给我一些快捷方式或数据库的储蓄。我在其他地方的其他查询比这更复杂,需要一个可查询的快捷方式来阻止它们变成可怕的多重嵌套查询。 – Oli 2010-10-15 16:22:26
如果您在查询集中使用select_related()来检索人员,那么您可以保存许多数据库查询,因此在检索其朋友时不会再次访问数据库 – Arjan 2011-08-08 13:58:21