Django 我可以在select_related()字段上添加注释吗?
作为优化,我想注释每个车主拥有多少辆车 这似乎是一种奇怪的方式,但我使用的是Django Rest框架,序列化的Django 我可以在select_related()字段上添加注释吗?,django,django-rest-framework,Django,Django Rest Framework,作为优化,我想注释每个车主拥有多少辆车 这似乎是一种奇怪的方式,但我使用的是Django Rest框架,序列化的Car有一个Owner字段,而Owner序列化包含用户拥有多少辆汽车的动态计算计数 这就是我想要的 cars=Car.objects.选择相关('owner')。注释(owner\uuu cars\u count=count('owner\uu Car')) …除了我想要的是cars[0]。owner.cars\u count而不是cars[0]。owner\u cars\u coun
Car
有一个Owner
字段,而Owner
序列化包含用户拥有多少辆汽车的动态计算计数
这就是我想要的
cars=Car.objects.选择相关('owner')。注释(owner\uuu cars\u count=count('owner\uu Car'))
…除了我想要的是cars[0]。owner.cars\u count
而不是cars[0]。owner\u cars\u count
。我想注释所有者,而不是汽车,以便DRF在序列化所有者时具有可用字段
在Owner
中调出对象
也不会起作用,因为select\u related
不会在Car
上使用Owner
管理器
这非常类似于,但接受的答案与我已经在做的一样——在SerializerMethodField
中计算每个记录的值。不可接受的答案描述了如何使用预取相关的不选择相关的执行此操作
由于这是DRF,或者我可以将注释从Car.owner\u cars\u count
复制到Car.owner.cars\u count
,然后再复制到嵌套的序列化程序?您可以使用预取类:
从django.db.models导入计数,预取
cars=Car.objects.prefetch_相关(prefetch('owner',owner.objects.annotation('cars_count=count('Car')))
对于车内车:
打印(汽车、车主、汽车数量)
这很有趣。我不知道你可以预取
外键——我以为它适用于很多关系prefetch\u related('owner')
以两个查询结束,但它仍然比另一个更好。