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.