Django Rest Framework: ошибка ответа сериализатора - PullRequest
0 голосов
/ 24 декабря 2018

У меня проблема с моим набором настроек в DRF:

def get_queryset(self):
    """
    :return: filtered queryset based on request query_param

    """
    # todo#amedeo: improve the readability code
    qs = super(ChecklistViewSet, self).get_queryset()
    _pk = self.kwargs['pk']

    if self.request.method == 'PUT':
        instance = qs.filter(pk=int(_pk)).first()
        # pass in the instance we want to update
        serializer = ChecklistSerializer(instance, self.request.data)

        # validate and update
        if serializer.is_valid():
            serializer.save()
            serializer_dict = serializer.data
            serializer_dict["message"] = "Checklist updated successfully."
            return response.Response(serializer_dict, status=status.HTTP_200_OK)

        else:
            return response.Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

в моем коде объект был сохранен, но в ответе выдается ошибка, в которой говорится:

AttributeError:У объекта 'Response' нет атрибута 'model'

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

class ChecklistSerializer(serializers.ModelSerializer):

class Meta:
    model = Checklist
    fields = ('id', 'approved_by', 'role', 'hardship_classification',
              'total_capacity', 'capacity_for_residents', 'checklist_type',
              'state', 'pdf', 'submitting_afp', 'disabled', 'location')

Я вызываю метод PUT клиента, передавая json:

{
"approved_by": "Test",
"role": "test_role_4",
"hardship_classification": "test_6",
"total_capacity": "50",
"capacity_for_residents": "350",
"checklist_type": "permanent",
"state": "qcl_draft",
"pdf": null,
"submitting_afp": 3999,
"disabled": false,
"location": 97
}

но я получил эту ошибку.Модель была сохранена, но в ответе выдается ошибка

Внутренняя ошибка сервера: / api / v1 / checklists / 3 / Traceback (последний вызов был последним): файл "/home/adifilippo/.envs/размещение / local / lib / python2.7 / site-packages / django / core / handlers / exception.py ", строка 41, внутренний ответ = файл get_response (запрос)" /home/adifilippo/.envs/accomodation/local/lib / python2.7 / site-packages / django / core / handlers / base.py ", строка 187, в _get_response response = self.process_exception_by_middleware (e, запрос) Файл" /home/adifilippo/.envs/accomodation/local/lib / python2.7 / site-packages / django / core / handlers / base.py ", строка 185, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs) файл" /home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/django/views/decorators/csrf.py ", строка 58, в wrapped_view возвращать файл view_func (* args, ** kwargs)" /home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/viewsets.py ", строка 116, впросмотреть возвращаемый self.dispatch (запрос, * args, ** kwargs) Файл "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", строка 495, вответ об отправке = self.handle_exception (exc) Файл "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", строка 455, в handle_exception self.raise_uncaught_exception (exc) Файл "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", строка 483, в отправке self.initial (запрос, * args, ** kwargs)Файл "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", строка 401, в исходном файле self.check_permissions (запрос) ("запрос") "/ home / adifilippo /.envs / жилья / местный / lib / python2.7 / site-packages / rest_framework / views.py ", строка 334, в check_permissions, если не access.has_permission (request, self): Файл" /home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/permissions.py ", строка 206, яn has_permission perms = self.get_required_permissions (request.method, queryset.model) AttributeError: у объекта 'Response' нет атрибута 'model' 'PUT / api / v1 / checklists / 3 / HTTP / 1.1 "500 42934

введите код здесь

1 Ответ

0 голосов
/ 24 декабря 2018

метод get_queryset должен возвращать queryset, а не Response, и действие обновления должно быть переопределено в методе put.Прочитайте здесь представления на основе классов и фильтрация для получения более подробной информации.Может быть, вам нужно удалить переопределение get_queryset и просто добавить метод put примерно так:

def put(self, request, pk, format=None):
    instance = self.get_object(pk)
    # pass in the instance we want to update
    serializer = ChecklistSerializer(instance, self.request.data)

    # validate and update
    if serializer.is_valid():
        serializer.save()
        serializer_dict = serializer.data
        serializer_dict["message"] = "Checklist updated successfully."
        return response.Response(serializer_dict, status=status.HTTP_200_OK)

    else:
        return response.Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...