Набор запросов Django проверяет, существуют ли поля

#django #django-queryset

#django #django-набор запросов

Вопрос:

Я хочу реализовать пользовательский сервер упорядочивания (используя rest_framework.filters.OrderingFilter) и я в основном хочу сначала проверить, существует ли поле для моего набора запросов, прежде чем фильтровать его без оценки набора запросов.

что-то вроде

 if queryset.is_available_field(my_field):
  queryset = queryset.order_by(my_field)
  

Я не могу попробовать / за исключением того, что я не знаю точно, когда будет оценен мой набор запросов.

Ответ №1:

Я нашел одно решение, которое подходит для моего случая, но может не охватывать некоторые крайние случаи. Также это не очень элегантно.

 def has_field(queryset, field):
    model_fields = [f.name for f in queryset.model._meta.fields]
    annotations = list(queryset.query.annotations.keys())
    return field in model_fields   annotations
  

Комментарии:

1. Хотя это не работает при заказе по соответствующему полю