次のフレンドシップモデルについて考えてみます。このモデルでは、作成されたすべてのフレンドシップに対して、フレンドリクエストを送信したユーザーとフレンドリクエストを受信したユーザーがいます。
from django.contrib.auth.models import User
class Friendship(models.Model):
sender = models.ForeignKey(User)
receiver = models.ForeignKey(User)
たとえば、user123とフレンドシップにあるユーザーのすべてのユーザー名を取得するクエリを作成するにはどうすればよいですか?
user123は、彼がいる友情の送信者または受信者である可能性があることに注意してください。
また、Userオブジェクト全体ではなく、User.username値のみを返すようにします。
これまでのところ、私はこの不格好な半分/解決策を持っています( user123の受信友達とuser123の送信友達list()
の両方を追加して、最終的にすべての友達のリストを作成できるようにするために使用しています)。問題は、すべての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