Django queryset с annotate, order_by и distinct вызывает ошибку при вызове values
Может ли кто-нибудь объяснить мне, почему следующий вызов работает нормально
Order.objects.filter(part_description__icontains=search_query)
.annotate(part_description_lower=Lower('part_description'))
.order_by("part_description_lower", '-pk')
.distinct("part_description_lower")
Но следующее вызывает ошибку Cannot resolve keyword 'part_description_lower' into field
Order.objects.filter(part_description__icontains=search_query)
.annotate(part_description_lower=Lower('part_description'))
.order_by("part_description_lower", '-pk')
.distinct("part_description_lower")
.values('pk')
Заранее спасибо.
когда вы добавляете .values('pk')
, это изменяет структуру кверисета таким образом, что
.values()
генерирует кверисет словарей, содержащих только указанные поля (pk
в данном случае).- аннотированные поля (например,
part_description_lower
) больше не являются частью выходного кверисета. - при вызове distinct(«
part_description_lower
») django не может разрешитьpart_description_lower
, потому что оно больше не доступно в контексте queryset.