Django-filter: ModelMultipleChoiceFilter не проверяет параметр GET-запроса?: ValueError, если не int
Проблема
У меня есть работающая django-filter на основе ModelMultipleChoiceFilter
реализации (см. ниже).
Действительным (и функциональным) запросом может быть:
http://fqdn/?authors_filter=9684
Но если я получаю "вредоносный" запрос, скажем:
http://fqdn/?authors_filter=9xyz4
я получаю ValueError
: Field 'id' expected a number but got '9dyz4'.
, что приводит к ServerError с DEBUG = False
.
Вопросы
- Где мне не хватает какой-то валидации/санирования для такого рода параметров URL GET?
- Как этот фильтр может проверить тип (здесь: integer) перед попыткой построить фильтр queryset? И молча отказать, если параметр не является целым? .
Голосование
Возможно, ModelMultipleChoiceFilter
не справляется с этой валидацией, а нужно использовать другой фильтр (например, NumberFilter
) в сочетании с ModelMultipleChoiceFilter
(упомянутый в https://github.com/carltongibson/django-filter/issues/824#issuecomment-343942957)? Но у меня не получилось успешно смешать эти два фильтра...
Выполнение
# models.py
class Author(models.Model):
last_name = models.CharField(max_length=255)
first_name = models.CharField(max_length=255, blank=True)
# filters.py
class PublicationFilter(django_filters.FilterSet):
authors_filter = django_filters.ModelMultipleChoiceFilter(
field_name='authors__id',
to_field_name='id',
queryset=Author.public_objects.all(),
)
class Meta:
model = Publication
strict = False
fields = (
'authors_filter',
)