考虑下面的友谊模型,对于每一个建立的友谊,都有一个发送朋友请求的用户和一个接收朋友请求的用户:
from django.contrib.auth.models import User
class Friendship(models.Model):
sender = models.ForeignKey(User)
receiver = models.ForeignKey(User)
我将如何构建一个查询,该查询将为我提供与 user123 建立友谊的用户的所有用户名?
请记住,user123 可能是他所在的任何友谊的发送者或接收者。
另外,我只希望返回 User.username 值,而不是整个 User 对象。
到目前为止,我有这个笨重的半/解决方案(我正在使用list()
这样我可以添加 user123 的接收朋友和 user123 的发送朋友,最终生成所有朋友的列表)。问题是,我得到了所有的用户对象,我只想要用户名......而且必须有更好的方法来做到这一点。
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