Rozważmy następujący model Przyjaźń, gdzie dla każdej przyjaźni wykonana, jest Użytkownik, który wysłałprośbę przyjaciela, a użytkownik, który odebrany prośbę przyjaciela:Django: Zapytanie dostać User.usernames za pośrednictwem klucza obcego
from django.contrib.auth.models import User
class Friendship(models.Model):
sender = models.ForeignKey(User)
receiver = models.ForeignKey(User)
Jak skonstruować kwerendę, która dałaby mi wszystkie nazwy użytkownika z użytkowników, którzy znajdują się w przyjaźń z, powiedzmy, user123?
Pamiętaj, mógłby user123 być nadawca lub odbiorca jakiejkolwiek przyjaźni on znajduje.
Również chcę tylko wartości user.username zostać zwrócone, a nie całego obiektu użytkownika.
tej pory mam ten przylegający połowa/rozwiązanie (używam list()
tak, że mogę dodać obie user123 za otrzymujących znajomych i user123 za wysyłaniem znajomych, aby ostatecznie stworzyć listę wszystkich znajomych) . Problem polega na tym, że otrzymuję wszystkie obiekty użytkownika, a ja chcę tylko nazwy użytkowników ... i musi być lepszy sposób na zrobienie tego.
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
Cholera, dobrze zrobione. Miałem nadzieję, że uda mi się to osiągnąć za pomocą pojedynczego złożonego zapytania, ale to zdecydowanie wykonuje swoją pracę. – sgarza62