Django: запрос для получения User.usernames через внешний ключ

Рассмотрим следующую модель дружбы, в которой для каждой установленной дружбы есть Пользователь, отправивший запрос на добавление в друзья, и Пользователь, который получил запрос на добавление в друзья:

from django.contrib.auth.models import User

class Friendship(models.Model):
    sender = models.ForeignKey(User)
    receiver = models.ForeignKey(User)

Как составить запрос, который даст мне все имена пользователей пользователей, которые находятся в дружеских отношениях, скажем, с пользователем 123?

Имейте в виду, что user123 может быть отправителем или получателем любой дружбы, в которой он состоит.

Кроме того, я хочу, чтобы возвращались только значения User.username, а не весь объект User.


На данный момент у меня есть эта неуклюжая половина/решение (я использую list(), чтобы я мог добавить как получающих друзей пользователя 123, так и отправляющих друзей пользователя 123, чтобы в конечном итоге создать список все друзья). Проблема в том, что я получаю все объекты User, и мне нужны только имена пользователей... и должен быть лучший способ сделать это.

friends_a = list(Friendship.objects.filter(sender=user123).values('receiver'))
friends_b = list(Friendship.objects.filter(receiver=user123).values('sender'))
friends_a = [] if not friends_a else friends_a[0].values()
friends_b = [] if not friends_b else friends_b[0].values()
all_friends = friends_a + friends_b

person sgarza62    schedule 13.01.2013    source источник


Ответы (1)