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
当然,如果有很多对象,两个循环可能会导致速度问题,但你知道了