当前位置:  开发笔记 > 编程语言 > 正文

获取外键而不请求整个对象

如何解决《获取外键而不请求整个对象》经验,为你挑选了1个好方法。

我有一个模型Foo,它对User模型有一个ForeignKey.

之后,我需要获取所有用户的ID并将其放在列表中

foos = Foo.objects.filter(...)

l = [ f.user.id for f in foos ]

但是当我这样做时,django从数据库中抓取整个User实例,而不是仅仅给出数字用户的id,它存在于每个Foo行中.

如何在不查询每个用户或使用select_related的情况下获取所有ID?

谢谢



1> Daniel Naab..:

使用queryset的values()函数,它将返回包含作为参数传递的每个属性的名称/值对的字典列表:

>>> Foo.objects.all().values('user__id')
[{'user__id': 1}, {'user__id' 2}, {'user__id': 3}]

然后,ORM将能够优化SQL查询以仅返回所需的字段,而不是执行"SELECT*".

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有