将注释值添加到select_related

时间:2019-01-06 21:03:04

标签: python django django-orm

我想在用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)
)

Django不支持。但是我该怎么做,并尽可能避免使用原始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

0 个答案:

没有答案