Фреймворк Django Rest получает простой массив Json, модель которого не существует

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Я получаю это тело json

 {
    "skills" : [
        "First skill",
        "Second skills",
        "Third skills"
        ]
}
 

У меня нет модели для этого, и я делаю что-то вроде этого. Я прочитал из других сообщений, что в этом случае я мог бы наследовать views.APIView , что я и пытаюсь сделать.

 class SkillsSubscription(serializers.Serializer):
   skills = serializers.CharField(required=True,)
 

и в представлении я делаю что-то вроде этого

 class CreateUpdateEmployeeSkillsSubscription_APIView(views.APIView):
    permission_classes = []
    def post(self, request):
        results = SkillsSubscription(request.data,many=True).data
        return Response(xxx)
 

Я получаю исключение, когда использую этот сериализатор. Это исключение.

 AttributeError: Got AttributeError when attempting to get a value for field `skills` on serializer `SkillsSubscription`.
The serializer field might be named incorrectly and not match any attribute or key on the `str` instance.
Original exception text was: 'str' object has no attribute 'skills'.
 

Любые предложения о том, как я мог бы получить содержимое в массиве навыков?

Комментарии:

1. вы пробовали django-rest-framework.org/api-guide/fields/#listfield ? ListField

Ответ №1:

Основываясь на ошибке, это выглядит как запрос.данные представляют собой строку. Попробуйте json.loads перед передачей его сериализатору.

 import json
class CreateUpdateEmployeeSkillsSubscription_APIView(views.APIView):
    permission_classes = []
    def post(self, request):
       post_data = json.loads(request.data)
       results = SkillsSubscription(post_data,many=True).data
       return Response(xxx)