QuerySet values()方法行为

时间:2014-10-10 13:02:41

标签: django django-models django-queryset

考虑查询:

Blog.objects.values('id', 'author')

它返回一个字典:

[{'id': 1, 'author': 1234}]

有没有办法为那些实际上是外键的字段获取实例对象?例如。我喜欢这样的东西:

[{'id': 1, 'author': <User instance>}]

澄清:我实际上在.values()的更复杂查询中使用.annotate(),因此我需要将.values()用于GROUP BY记录。

1 个答案:

答案 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

当然,如果有很多物体,两个循环可能会导致速度问题,但你明白了。