1

スルー クラスに基づく単純な多対多の関係があります。

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か?

4

2 に答える 2

2

私は少し錆びていますが、試しましたreturn Friendship.objects.filter(me=self, them=user, confirmed=True)か?

于 2010-10-15T16:10:12.457 に答える
1

やってみました:

is_friend(self, user):
    return self.friends.filter(friendship__them=user, friendship__confirmed=True).count()
于 2010-10-15T17:02:20.310 に答える