Предполагая, что вы настроили свою модель дружбы, как в примере ниже, и используете friend_set
в качестве связанного имени поля from_friend
в вашей модели, получение списка друзей пользователей может быть таким же простым, как и простое понимание списка.:
friends = [friendship.to_friend for friendship in user.friend_set.all()]
Это даже позволит вам получить доступ к друзьям пользователя в вашем шаблоне, не передавая его в качестве переменной:
{% for friendship in user.friend_set.all %}
{{ friendship.to_friend.username }}
{% endfor %}
Ваша модель дружбы будет выглядеть так:
class Friendship(models.Model):
from_friend = models.ForeignKey(
User, related_name='friend_set'
)
to_friend = models.ForeignKey(
User, related_name='to_friend_set'
)
def __unicode__(self):
return u'%s, %s' % (
self.from_friend.username,
self.to_friend.username
)
class Meta:
unique_together = (('to_friend', 'from_friend'), )
Вот отличная статья о создании сети друзей в Django: http://www.packtpub.com/article/building-friend-networks-with-django-1.0
Обратите внимание, что вам не нужно проверять и from_friend
, и to_friend
, чтобы получить друга пользователя.список.Если у вас есть модель дружбы по подписке / подписке, вам нужны только все экземпляры дружбы с пользователем from_friend =, а если у вас есть модель дружбы с двойным выбором, вы можете следить за тем, что делает Facebook, и добавить экземпляр для приглашенного друга как * 1017.* как только они примут приглашение друга.