Traceback (most recent call last):
File "/Users/mtreussart/git/tt/scripts/../src/manage.py", line 21, in <module>
main()
File "/Users/mtreussart/git/tt/scripts/../src/manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
output = self.handle(*args, **options)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/management/commands/spectacular.py", line 56, in handle
schema = generator.get_schema(request=None, public=True)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/generators.py", line 243, in get_schema
paths=self.parse(request, public),
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/generators.py", line 217, in parse
operation = view.schema.get_operation(
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 84, in get_operation
operation['responses'] = self._get_response_bodies()
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 997, in _get_response_bodies
return {'200': self._get_response_for_code(response_serializers, '200')}
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 1042, in _get_response_for_code
component = self.resolve_serializer(serializer, 'response')
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 1184, in resolve_serializer
component.schema = self._map_serializer(serializer, direction)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 687, in _map_serializer
schema = self._map_basic_serializer(serializer, direction)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 756, in _map_basic_serializer
schema = self._map_serializer_field(field, direction)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 483, in _map_serializer_field
schema = self._map_serializer_field(field.child, direction, collect_meta)
File "/Users/mtreussart/.local/share/virtualenvs/back-JrD3H-kk/lib/python3.9/site-packages/drf_spectacular/openapi.py", line 653, in _map_serializer_field
target = follow_field_source(field.parent.Meta.model, field.source_attrs)
AttributeError: 'ListSerializer' object has no attribute 'Meta'
groups = serializers.ListSerializer(
source="all_groups", child=UserGroupField(), required=False, read_only=True
)
if isinstance(field, serializers.ReadOnlyField):
# direct source from the serializer
assert field.source_attrs, f'ReadOnlyField "{field}" needs a proper source'
if hasattr(field.parent, "Meta"):
target = follow_field_source(field.parent.Meta.model, field.source_attrs)
else:
if isinstance(field.parent, serializers.ListSerializer):
return append_meta(build_array_type(build_basic_type(OpenApiTypes.OBJECT)), meta)
if callable(target):
schema = self._map_response_type_hint(target)
elif isinstance(target, models.Field):
schema = self._map_model_field(target, direction)
else:
assert False, f'ReadOnlyField target "{field}" must be property or model field'
return append_meta(schema, meta)
Describe the bug
I get this error:
To Reproduce
This is the problematic field:
For fix the problem I patched openapi.py line 649:
Expected behavior
No error. and understand my read-only serializer.