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',
        )
Вернуться на верх