У меня есть 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
Спасибо!