django_filter ModelMultipleChoiceFilter - Плохой запрос на промах - PullRequest
0 голосов
/ 29 октября 2018

У меня есть ViewSet, у которого есть filter_class, например:

class OrderFilter(django_filters.FilterSet):
    ......
    product = django_filters.ModelMultipleChoiceFilter(
        field_name='product',
        queryset=Product.objects.all(),
    )

С этим я могу указать идентификатор продукта и сделать запрос на получение, подобный этому /orders/?product=<product_id>.

Я вижу следующее поведение в трех ситуациях:

  • Если есть заказ (ы) с данным product_id, он вернет эти заказы ... хорошо!
  • Если есть NO ордеров с указанным product_id, он вернет успешные 200 с пустыми результатами (например, {count: 0, next: null, previous: null, results: [ ]} ... хорошо!
  • Если этот product_id не существует , он возвращает 400 Bad Request с ValidationError и этот ответ: { product: [ "Select a valid choice. %(value)s is not one of the available choices." ]} ... wtf!

Эта последняя ситуация кажется мне странной. Разве ответ не должен быть таким же, если (а) данное отношение объекта не существует и (б) сам объект не существует? Такое двойственное поведение, казалось бы, указывало бы на то, существует ли этот продукт или нет, и, возможно, они не должны знать эту информацию.

Как я могу изменить свои фильтры так, чтобы всегда возвращал 200 с набором результатов, который пуст в этих двух случаях?

Я на Django==1.11.15 и django-filter==2.0.0

Спасибо!

...