Добавьте значение аннотации к select_related - PullRequest
0 голосов
/ 07 января 2019

Я хотел бы добавить аннотацию к полю, которое я выбираю с 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
...