Я хотел бы добавить аннотацию к полю, которое я выбираю с select_related
. Я знаю, что вы можете сделать это с prefetch_related
следующим образом:
vote_qs = Vote.objects.annotate(my_count=Count('some_related_objects'))
queryset = MyModel.objects.prefetch_related(
Prefetch('votes', queryset=vote_qs)
)
Что мне нравится делать, это что-то вроде
user_qs = User.objects.annotate(my_count=Count('some_related_objects'))
queryset = MyModel.objects.select_related(
Select('user', queryset=user_qs)
)
Джанго не поддерживает это. Но как я могу это сделать и, насколько это возможно, избежать необработанного SQL? (Я не смог найти какую-либо информацию через Google.)
Чтобы уточнить, это может быть обходной путь, но тогда я не могу сделать другой фильтр или что-то еще:
queryset = list(
MyModel.objects
.annotate(my_count=Count('user__some_related_objects'))
.select_related('user')
)
for obj in queryset:
obj.user.my_count = obj.my_count