Проблемы между django и django-filter

Моя проблема заключается в том, что библиотека django-filter не работает корректно с полями выбора в django rest framework: model:

class Incident(models.Model):
    caller = models.ForeignKey(
        'core.Caller',
        verbose_name='caller',
        on_delete=models.PROTECT,
        related_name='incidents',
        blank=True,
        null=True,
    )
    declarant = models.ForeignKey(
        'core.Declarant',
        verbose_name='declarant',
        on_delete=models.CASCADE,
        related_name='incidents',
        blank=True,
        null=True,
    )
    kind = models.ForeignKey(
        IncidentKind,
        verbose_name='kind',
        on_delete=models.SET_NULL,
        related_name='incidents',
        blank=True,
        null=True,
    )
    duplicate_of = models.ForeignKey(
        'self',
        verbose_name='duplicate',
        on_delete=models.CASCADE,
        related_name='duplicates',
        blank=True,
        null=True,
    )
    source = models.CharField(
        'source',
        max_length=255,
        default=consts.IncidentSource.APP,
        choices=consts.IncidentSource.CHOICES,
    )
    status = models.CharField(
        'status',
        max_length=255,
        choices=consts.IncidentStatus.CHOICES,
        default=consts.IncidentStatus.REQUEST_112,
    )

фильтр:

class Incident(django_filters.FilterSet):
    description = django_filters.CharFilter(lookup_expr='icontains')
    declarant_phone = django_filters.CharFilter(field_name='declarant__phone', lookup_expr='icontains')
    incident_address = django_filters.CharFilter(field_name='address__full_address', lookup_expr='icontains')
    source = django_filters.ChoiceFilter(choices=consts.IncidentSource.CHOICES, lookup_expr='icontains')
    status = django_filters.ChoiceFilter(choices=consts.IncidentStatus.CHOICES, lookup_expr='icontains')
    service = django_filters.Filter(method='filter_service')
    address_caller = django_filters.CharFilter(field_name='caller__address', lookup_expr='icontains')
    victims = django_filters.BooleanFilter(method='filter_victims')
    death = django_filters.BooleanFilter(method='filter_death')
    dt_create = django_filters.Filter(method='filter_dt_create')
    incident_moment = django_filters.Filter(method='filter_incident_moment')

    class Meta:
        model = models.Incident
        fields = [
            'is_needs_reaction',
            'is_social_significant',
            'is_risk_emergency',
            'description',
            'declarant_phone',
            'status',
            'source',
            'operator',
            'incident_address',
            'kind',
            'service',
            'address_caller',
            'victims',
            'death',
            'dt_create',
        ]

Поле выбора источника и статуса.

Ошибка:

super()._set_choices(value)
AttributeError: 'super' object has no attribute '_set_choices'

Если я использую CharFilter, то фильтрация работает, но не совсем так, как нужно

source = django_filters.CharFilter(choices=consts.IncidentSource.CHOICES, lookup_expr='icontains')
    status = django_filters.CharFilter(choices=consts.IncidentStatus.CHOICES, lookup_expr='icontains')

Моя трассировка:

Я также просто попробовал передать поля source и status в поле fields, это тоже не помогло. Задавал вопросы GPT, он говорит, что одной из возможных проблем может быть ошибка в самой библиотеке, поэтому решил задать еще один вопрос здесь, вдруг у кого-то была похожая ситуация

Уберите lookup_expr при использовании поля выбора. По умолчанию используется точное выражение поиска, поскольку это поле выбора.

Пример работающего фильтра из моего Django-приложения выглядит так:

DOMAIN_CHOICES = (
    ('Educations', 'Educations'),
    ('Certificates', 'Certificates'),
    ('Qualifications', 'Qualifications'),
)

class HistoryFilter(filters.FilterSet):
    domain = filters.ChoiceFilter(choices=DOMAIN_CHOICES, required=True)

    class Meta:
        model = EmployeeHistory
        fields = ['domain']
Вернуться на верх