考虑查询:
Blog.objects.values('id', 'author')
它返回一个字典:
[{'id': 1, 'author': 1234}]
有没有办法为那些实际上是外键的字段获取实例对象?例如。我喜欢这样的东西:
[{'id': 1, 'author': <User instance>}]
澄清:我实际上在.values()
的更复杂查询中使用.annotate()
,因此我需要将.values()
用于GROUP BY记录。
答案 0 :(得分:0)
.values()
返回值,而不是对象。
你可以这样做:
values = [{'id': 1, 'author': 1234}, {'id': 2, 'author': 2345}]
authors_ids = [v['author'] for v in values]
authors_qs = Author.objects.filter(id__in=author_ids)
然后按对象替换author
:
for v in values:
for author in authors_qs:
if v['author'] == author.id:
v['author'] = author
当然,如果有很多物体,两个循环可能会导致速度问题,但你明白了。