2016-04-27 1 views
2

Я новичок в Django и Django REST Framework. У меня есть следующий класс serializer, который я использую для загрузки файла по другой информации. Но, в то время как я бегу API конечную точку Загруженный файл, результат что-то вроде этого:Загрузка файла базы данных Django REST, вызывающая ошибку «Неподдерживаемый тип носителя« multipart/form-data »»

HTTP 415 Unsupported Media Type 
Allow: POST, OPTIONS 
Content-Type: application/json 
Vary: Accept 

{ 
    "detail": "Unsupported media type \"multipart/form-data; boundary=----WebKitFormBoundaryybZ07gjZAqvcsZw3\" in request." 
} 

Я старался прибегая к помощи, чтобы решить эту проблему, но не может выйти в растворе, так вот мой сериализатору и API.

Serializer:

class ExampleSerializer(serializers.Serializer): 

    example_id = serializers.IntegerField() 
    description = serializers.CharField(allow_blank=True) 
    example_file = serializers.FileField(allow_empty_file=True) 

    def create_requirement_line(self): 
     request = self.context['request'] 

     requirement_line = ExampleService().example_method(
      example_id=self.validated_data['example_id'], 
      description=self.validated_data['description'], 
      example_file=self.validated_data['example_file'] 
    ) 
    return requirement_line 

Вид:

class RequirementLineAPIView(BaseCreateAPIView): 

    serializer_class = ExampleSerializer 
    parser_classes = (FormParser,) 

    def post(self, request, format=None,*args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 

     if serializer.is_valid(): 
      try: 
       example_variable = serializer.example_method() 
       return Response(example_variable, status=status.HTTP_200_OK) 

      except ValidationError as e: 
       return Response(e.message, status=status.HTTP_400_BAD_REQUEST) 

     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)  
+0

Что такое, что запятая все о в строке 'parser_classes = (FormParser,)'? – kpie

+0

Я не уверен, но если я удалю «запятую», тогда объект типа «type is is iterable' is ocurring. @kpie – RTan

+0

Можете ли вы разместить больше своего кода? – kpie

ответ

3

Вы должны использовать MultiPartParser вместо FormParser если вы отправляете многокомпонентные/form-данные.

+0

Спасибо за ваш ответ, если я использую 'MultiPartParser', тогда я получаю следующую ошибку' UnicodeDecodeError at/api/required-header-line/ 'ascii' codec не может декодировать байт 0xff в позиции 76: порядковый номер не в диапазоне (128) 'в упоминании, я применил метод настройки customize, есть ли что-то, что мне нужно сделать в моем методе обслуживания? – RTan

+0

Можете ли вы предоставить дополнительную информацию? Как данные, которые вы пытаетесь отправить? –

+0

ok, если быть конкретным, я отправляю целое число (скажем, 30) как my 'example_id', а« Это описание »как файл' description' и .pptx или .pdf в качестве 'example_file'. @Ivan Генчевым – RTan

Смежные вопросы