我再次问这个问题(it was asked back in 2009),


我们知道当有一个
外键(例如作者),其结果如下:

[{ 'author_id':3, ... }, ...]


我想要这样的结果:

[{ 'author':{'name':'dave',...}, ... }, ...]



较新版本的Django中有更改吗?

我想将查询集转换为列表和字典的组合,可以吗?

然后,我将把这个对象放入一个更大的对象中进行序列化。这就是为什么我不想立即对其进行序列化的原因。

最佳答案

您可以通过values()访问相关字段,而不必使用select_related()(仅在不进行后续查找的情况下,才会获取这些字段):

MyModel.objects.values('author__id', 'author__name')


这将返回以下结构:

[{'author__id': 1, 'author__name': 'Dave'}, {...}]


如果需要嵌套结构,则必须对其进行转换。

注意,对于M2M关系,这将为每个M2M关系返回一个列表项,因此可能不是期望的效果。但是对于OneToOne / ForeignKey关系,它可以正常工作。

编辑:对于M2M关系annotate()values()组合正常。

关于django - 如何结合select_related()和value()? (2016年),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35595085/

10-10 13:53
查看更多