У объекта сериализатора django нет атрибута - PullRequest
0 голосов
/ 15 октября 2019

У меня нет большого опыта работы с python, но у меня есть задача написать сервер в django, который будет обрабатывать запросы API, которые я отправил из передней части, дело в том, что eventho GET работает хорошо, POST по-прежнему выдает некоторые ошибки. Если я добавляю новый логотип через панель администратора, он работает, когда я пытаюсь сделать это через почтальона, он выдает эту ошибку:

Traceback (most recent call last):
  File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/user/.local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/user/.local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)

AttributeError: 'LogoSerializer' object has no attribute 'name'

мой код: EDITED

класс LogoViewSet (viewsets.ViewSet): def list (self, request): queryset = Logo.objects.all () serializer = LogoSerializer (queryset, many = True) возвращать ответ (serializer.data)

def create(self, request):
    serializer = LogoSerializer(data=request.data)

    if serializer.is_valid():

        bg = LogoSerializer(
            name=serializer.name,
            thumb=serializer.thumb,
            thumbL=serializer.thumbL,
            dataL=serializer.dataL,

            )   
        bg.save()
    else:
        bg = serializer.errors
        # print(bg)

    return Response(bg)

и сериализатор:

class LogoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Logo
        fields = ('name', 'thumb', 'thumbL', 'dataL')

        def create(self, validated_data):
            return Logo.objects.create(**validated_data)

1 Ответ

1 голос
/ 15 октября 2019

Вы не получаете доступ к данным сериализатора через атрибуты, вы получаете доступ к ним через data dict.

Но в этом вообще нет необходимости. Ваш сериализатор уже содержит код для создания, вы должны просто сохранить его.

def create(self, request):
    serializer = LogoSerializer(data=request.data)
    if serializer.is_valid():
         bg = serializer.save()

Но вам даже не нужно этого делать. ViewSet уже делает это для вас. В этом наборе нет необходимости определять методы list или create.

Метод сериализатора create также не имеет значения.

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