Сохранить BLOB-файл как файл в Django Rest Framework - PullRequest
1 голос
/ 17 января 2020

Я отправляю blob, используя Ajax. Мне нужно сохранить его как файл в модели.

views.py

  class JobPostModelViewSet(ModelViewSet):
      serializer_class = JobPostModelSerializer
      parser_class = (FileUploadParser, )

      def create(self, request):
          data = dict() 
          data['user'] = request.user
          data.update(request.data)

          serializer = self.serializer_class(data=data)
          if serializer.is_valid():
              serializer.save()
              return Response({'success': 'Job Posted Successfully'}, status=status.HTTP_201_CREATED)
          else:
              return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.py

class JobPostModelSerializer(ModelSerializer):
    class Meta:
        model = JobPost
        fields = ("job_title", "job_description", "job_video")

Ajax. js

_postJob(e){
    var blob = this.video_blob;
    var job_title = $("#job_title").val();
    var job_description = $("#job_description").val();
    var cookie = getCookie('csrftoken');
    var formdata = new FormData();

    formdata.append('job_title', String(job_title));
    formdata.append('job_description', String(job_description));
    formdata.append('job_video', blob);

    console.log(formdata.get('job_title'));
    console.log(formdata.get('job_description'));
    console.log(formdata.get('job_video'));

    $.ajax({
        url: '/api/v1/job-post/',
        type: 'post',
        enctype: 'multipart/form-data',
        headers: {'X-CSRFToken': cookie},
        data: formdata,
        contentType: false,
        processData: false,
        success: function (e){
            console.log(e);
        },  
        error: function(e){
            console.log(e);
        },  
    }); 
}   

}

Ошибка, которую я получаю является.

{"job_title":["Not a valid string."],"job_description":["Not a valid string."],"job_video":["The submitted data was not a file. Check the encoding type on the form."]}

1 Ответ

2 голосов
/ 17 января 2020

Проблема в том, что вы пытаетесь манипулировать request.data

data = dict() 
data['user'] = request.user
data.update(request.data)

Используйте функцию copy, чтобы сделать копию данных запроса и обновить ее с помощью request.user вместо наоборот. Как этот

data = request.data.copy()
data['user'] = request.user

И удалить атрибут parser_class. Это не помогает, потому что атрибут для определения парсеров parser_classes не parser_class.

...