Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django QuerySet values()方法行为_Django_Django Models_Django Queryset - Fatal编程技术网

Django QuerySet values()方法行为

Django QuerySet values()方法行为,django,django-models,django-queryset,Django,Django Models,Django Queryset,考虑以下问题: Blog.objects.values('id', 'author') 它返回一个字典: [{'id': 1, 'author': 1234}] 有没有办法为那些实际上是外键的字段获取实例对象?我想要像这样的东西: [{'id': 1, 'author': <User instance>}] [{'id':1,'author':}] 澄清:我实际上是在一个更复杂的查询中使用.values()与.annotate()结合使用,因此我需要使用.values()按记

考虑以下问题:

Blog.objects.values('id', 'author')
它返回一个字典:

[{'id': 1, 'author': 1234}]
有没有办法为那些实际上是外键的字段获取实例对象?我想要像这样的东西:

[{'id': 1, 'author': <User instance>}]
[{'id':1,'author':}]
澄清:我实际上是在一个更复杂的查询中使用
.values()
.annotate()
结合使用,因此我需要使用
.values()
按记录分组。

.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)
然后将
作者
替换为对象:

for v in values:
    for author in authors_qs:
        if v['author'] == author.id:
            v['author'] = author
当然,如果有很多对象,两个循环可能会导致速度问题,但你知道了