Django:通过外键获取User.usernames的查询

2024-06-01 01:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑下面的友谊模型,其中对于每一个建立的友谊,都有一个发送好友请求的用户,以及一个接收好友请求的用户:

from django.contrib.auth.models import User

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

我如何构造一个查询,该查询将为我提供与user123等建立友谊的用户的所有用户名

记住,用户123可以是他所处的任何友谊的发送者或接收者。

另外,我只希望返回User.username值,而不是整个用户对象。


到目前为止,我已经有了这个笨拙的半/解决方案(我正在使用list(),以便我可以添加user123的receiving friends和user123的sending friends,最终生成一个所有朋友的列表)。问题是,我得到了所有的用户对象,我只想要用户名……必须有更好的方法来做到这一点。

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

Tags: 对象用户objectsmodelssender用户名listvalues
1条回答
网友
1楼 · 发布于 2024-06-01 01:14:27

Q Objects for complex lookups.

哇,这是一个令人惊讶的心醉神迷,以获得你想要的结果集,因为实际上有两个不同的逻辑查询。最简单的方法是。。。用Python拼出来。

user = User.objects.get(username='user123')
friendships = Friendship.objects.filter(Q(receiver=user) | Q(sender=user))

usernames = []

for friendship in friendships:
    if friendship.receiver == user:
        usernames.append(friendship.receiver.username)
    else:
        usernames.append(friendship.sender.username)

相关问题 更多 >