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'), это изменяет структуру кверисета таким образом, что

  1. .values() генерирует кверисет словарей, содержащих только указанные поля (pk в данном случае).
  2. аннотированные поля (например, part_description_lower) больше не являются частью выходного кверисета.
  3. при вызове distinct(«part_description_lower») django не может разрешить part_description_lower, потому что оно больше не доступно в контексте queryset.
Вернуться на верх