python – Django:查询通过外键获取User.usernames
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django:查询通过外键获取User.usernames,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1359字,纯文字阅读大概需要2分钟。
内容图文
![python – Django:查询通过外键获取User.usernames](/upload/InfoBanner/zyjiaocheng/823/4beff9b0fdc24415b0eccfabccda29e2.jpg)
考虑以下友谊模型,对于每个友谊,有一个发送好友请求的用户和一个收到好友请求的用户:
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的发送朋友,最终生成所有朋友的列表).问题是,我得到了所有的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
解决方法:
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全部内容,希望文章能够帮你解决python – Django:查询通过外键获取User.usernames所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。