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

How to combine select_related() and value()? (2016)

我又问这个问题了(it was asked back in 2009),

We know there is a values() method of QuerySet, when there is a foreignkey (author, for example), it result like:

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

I want a result like:

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

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

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

然后我会把这个对象放到一个更大的对象中来序列化它。这也是我不想马上连载的原因。

您可以通过 values() without the necessity to use select_related() 访问相关字段(只有这些将被提取而无需后续查找):

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

这将return以下结构:

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

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

请注意,对于 M2M 关系,此 return 每个 M2M 关系一个列表条目,因此可能不是预期的效果。但是对于 OneToOne/ForeignKey 关系,它工作得很好。

编辑:对于 M2M 关系 annotate()values() 结合使用效果很好。