如何组合select_related()和value()? (2016)

时间:2016-02-24 06:44:33

标签: django python-3.x django-1.7

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

  

我们知道有一个values()方法的QuerySet,当有一个   foreignkey(例如作者),结果如下:

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

我想要一个结果:

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

在较新版本的Django中有什么变化吗?

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

然后我会将此对象放入一个更大的对象中以进行序列化。这就是我不想马上序列化的原因。

1 个答案:

答案 0 :(得分:14)

您可以通过values()访问相关字段,而无需使用select_related()(只有在没有后续查询的情况下才能获取这些字段):

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

这将返回以下结构:

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

如果您需要在嵌套结构中使用它,则必须在之后对其进行转换。

请注意,对于M2M关系,每个M2M关系返回一个列表条目,因此可能不是所需的效果。但对于OneToOne / ForeignKey关系,它可以正常工作。