DRF: объект типа 'ListSerializer' не поддерживает сериализацию в формате JSON - PullRequest
6 голосов
/ 12 марта 2019

Я новичок в Django и DRF. Во время обучения я получил ошибку Object of type 'ListSerializer' is not JSON serializable error. Я не уверен, откуда возникает ошибка

Traceback:

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/django/template/response.py" in render
  107.             self.content = self.rendered_content

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/response.py" in rendered_content
  72.         ret = renderer.render(self.data, accepted_media_type, context)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/renderers.py" in render
  718.         context = self.get_context(data, accepted_media_type, renderer_context)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/renderers.py" in get_context
  675.             'content': self.get_content(renderer, data, accepted_media_type, renderer_context),

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/renderers.py" in get_content
  416.         content = renderer.render(data, accepted_media_type, renderer_context)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/renderers.py" in render
  105.             allow_nan=not self.strict, separators=separators

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/utils/json.py" in dumps
  28.     return json.dumps(*args, **kwargs)

File "/usr/lib/python3.6/json/__init__.py" in dumps
  238.         **kw).encode(obj)

File "/usr/lib/python3.6/json/encoder.py" in encode
  201.             chunks = list(chunks)

File "/usr/lib/python3.6/json/encoder.py" in _iterencode
  437.             o = _default(o)

File "/home/marvel/venv/django_1_111/lib/python3.6/site-packages/rest_framework/utils/encoders.py" in default
  68.         return super(JSONEncoder, self).default(obj)

File "/usr/lib/python3.6/json/encoder.py" in default
  180.                         o.__class__.__name__)

Exception Type: TypeError at /sample/view/
Exception Value: Object of type 'ListSerializer' is not JSON serializable

, и вот мои примеры кода

#serializer.py
class SampleSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = SampleModel

#views.py
@api_view(http_method_names=['GET'])
def my_view(request):
    qs = SampleModel.objects.all()
    serializer = SampleSerializer(qs, many=True)
    return Response(serializer)

1 Ответ

7 голосов
/ 12 марта 2019

Я думаю, что вы пропустили доступ к атрибуту data сериализатора.То есть для получения сериализованных данных должно быть Response(serializer.data) вместо Response(serializer)

code

@api_view(http_method_names=['GET'])
def my_view(request):
    qs = SampleModel.objects.all()
    serializer = SampleSerializer(qs, many=True)
    return Response(<b>serializer.data</b>)
                               <b>^^^^</b>

, нам необходимо получить доступ к данным атрибут сериализатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...