Я получаю ошибку между django и django-filterPython

Программы на Python
Ответить
Anonymous
 Я получаю ошибку между django и django-filter

Сообщение Anonymous »

Моя проблема в том, что библиотека фильтров django не работает правильно с полями выбора в структуре отдыха django:
models.py

Код: Выделить всё

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')
Моя обратная связь:

Код: Выделить всё

Traceback (most recent call last):
File "/core/tests/test_incident.py", line 60, in test_update
response = self.client.put(self.detail_url)
File "/venv/lib/python3.10/site-packages/rest_framework/test.py", line 304, in put
response = super().put(
File "/venv/lib/python3.10/site-packages/rest_framework/test.py", line 214, in put
return self.generic('PUT', path, data, content_type, **extra)
File "/venv/lib/python3.10/site-packages/rest_framework/test.py", line 234, in generic
return super().generic(
File "/venv/lib/python3.10/site-packages/django/test/client.py", line 617, in generic
return self.request(**r)
File "/venv/lib/python3.10/site-packages/rest_framework/test.py", line 286, in request
return super().request(**kwargs)
File "/venv/lib/python3.10/site-packages/rest_framework/test.py", line 238, in request
request = super().request(**kwargs)
File "/venv/lib/python3.10/site-packages/django/test/client.py", line 1013, in request
self.check_exception(response)
File "/venv/lib/python3.10/site-packages/django/test/client.py", line 743, in check_exception
raise exc_value
File "/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/venv/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
return view_func(request, *args, **kwargs)
File "/venv/lib/python3.10/site-packages/rest_framework/viewsets.py", line 124, in view
return self.dispatch(request, *args, **kwargs)
File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/venv/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/venv/lib/python3.10/site-packages/rest_framework/mixins.py", line 65, in update
instance = self.get_object()
File "/venv/lib/python3.10/site-packages/rest_framework/generics.py", line 87, in get_object
queryset = self.filter_queryset(self.get_queryset())
File "/venv/lib/python3.10/site-packages/rest_framework/generics.py", line 154, in filter_queryset
queryset = backend().filter_queryset(self.request, queryset, self)
File "/venv/lib/python3.10/site-packages/django_filters/rest_framework/backends.py", line 94, in filter_queryset
if not filterset.is_valid() and self.raise_exception:
File "/lib/python3.10/site-packages/django_filters/filterset.py", line 212, in is_valid
return self.is_bound and self.form.is_valid()
File "/venv/lib/python3.10/site-packages/django_filters/rest_framework/filterset.py", line 24, in form
form = super().form
File "/venv/lib/python3.10/site-packages/django_filters/filterset.py", line 264, in form
Form = self.get_form_class()
File "/venv/lib/python3.10/site-packages/django_filters/filterset.py", line 254, in get_form_class
fields = OrderedDict([
File "/venv/lib/python3.10/site-packages/django_filters/filterset.py", line 255, in 
(name, filter_.field)
File "/venv/lib/python3.10/site-packages/django_filters/filters.py", line 137, in field
self._field = self.field_class(label=self.label, **field_kwargs)
File "/venv/lib/python3.10/site-packages/django_filters/fields.py", line 281, in __init__
super().__init__(*args, **kwargs)
File "/venv/lib/python3.10/site-packages/django_filters/fields.py", line 262, in __init__
super().__init__(*args,  **kwargs)
File "/venv/lib/python3.10/site-packages/django/forms/fields.py", line 880, in __init__
self.choices = choices
File "/venv/lib/python3.10/site-packages/django_filters/fields.py", line 268, in _set_choices

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

Подробнее здесь: https://stackoverflow.com/questions/782 ... ngo-filter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»