gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:09:20 26 4
gpt4 key购买 nike

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

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 的接收 friend 和 user123 的发送 friend ,最终生成所有 friend 的列表)。问题是,我得到了所有用户对象,而我只想要用户名……而且必须有更好的方法来做到这一点。

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

最佳答案

Q Objects for complex lookups.

哇,这真是令人惊讶的思维弯曲,因为实际上有 2 个不同的逻辑查询,所以可以获得您想要的结果集。最简单的方法是……用 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)

关于python - Django:查询通过外键获取User.usernames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com