Рассмотрим следующую модель дружбы, в которой для каждой установленной дружбы есть Пользователь, отправивший запрос на добавление в друзья, и Пользователь, который получил запрос на добавление в друзья:
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