Problem
In some cases filter_field.field_name is None. so there is an error:
Internal Server Error: /v1/schema/
Traceback (most recent call last):
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/views.py", line 67, in get
return self._get_schema_response(request)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/views.py", line 74, in _get_schema_response
return Response(generator.get_schema(request=request, public=self.serve_public))
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/generators.py", line 257, in get_schema
paths=self.parse(request, public),
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/generators.py", line 231, in parse
operation = view.schema.get_operation(
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/openapi.py", line 64, in get_operation
parameters = self._get_parameters()
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/openapi.py", line 202, in _get_parameters
**dict_helper(self._get_filter_parameters()),
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/openapi.py", line 377, in _get_filter_parameters
parameters += filter_extension.get_schema_operation_parameters(self)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/contrib/django_filters.py", line 44, in get_schema_operation_parameters
result += self.resolve_filter_field(
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/contrib/django_filters.py", line 80, in resolve_filter_field
model_field = self._get_model_field(filter_field, model)
File "/home/pd/Gits/coretrailer45/venv/lib64/python3.9/site-packages/drf_spectacular/contrib/django_filters.py", line 181, in _get_model_field
path = filter_field.field_name.split('__')
AttributeError: 'NoneType' object has no attribute 'split'
for example I got this error by using django-property-filter. here is the code:
class Car(CommonModel):
@property
def price(self):
return int(self.prices.last().title)
class CarFilter(PropertyFilterSet):
property_fields = [
('price', PropertyNumberFilter, ['lt', 'exact']),
]
Solution
just check it before getting the attribute, filter_field.field_name is not None:, So:
def _get_model_field(self, filter_field, model):
if filter_field.field_name is not None:
path = filter_field.field_name.split('__')
return follow_field_source(model, path)
Problem
In some cases
filter_field.field_nameisNone. so there is an error:for example I got this error by using django-property-filter. here is the code:
Solution
just check it before getting the attribute,
filter_field.field_name is not None:, So: