Django rest framework serializer.errors выводит ["Это поле обязательно для заполнения."] С запросом публикации multipart / form-data - PullRequest
0 голосов
/ 29 мая 2018

Я уже давно смотрю на это, я отправляю запрос на публикацию с multipart / form-data, но получаю сообщение об ошибке ["Это поле обязательно для заполнения."] Для каждого поля, которое я 'm должен заполниться запросом.

Вот Сериализатор:

class InvoiceUploadSerializer(serializers.Serializer):
    serial=serializers.CharField(max_length=256, required=True)
    amount=serializers.CharField(max_length=256, required=True)
    debtor=serializers.CharField(max_length=256, required=True)
    dateout=serializers.CharField(max_length=256, required=True)
    expiration=serializers.CharField(max_length=256, required=True)
    invoicefile=serializers.FileField()

    class Meta:
        fields=('serial', 'amount', 'debtor', 'dateout', 'expiration', 'invoicefile',)

И Вид:

class InvoiceViewSet(viewsets.ModelViewSet):
    queryset=Invoices.objects.all()
    serializer_class=InvoiceSerializer
    parser_classes=(MultiPartParser, FormParser)

    def get_permissions(self):
        if self.request.method in permissions.SAFE_METHODS:
            return (permissions.AllowAny(),)

        if self.request.method == 'POST':
            return (permissions.IsAuthenticated(),)

        return (permissions.IsAuthenticated(), IsAccountOwner(),)

    def create(self, request):
        serializer=InvoiceUploadSerializer(data=request.data)
        if serializer.is_valid():
            ... handle serializer

            return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
        else:
            emessage=serializer.errors
            return Response({
                'status': 'Bad request',
                'message': emessage,
            }, status=status.HTTP_400_BAD_REQUEST

Вот изображение, показывающее консоль браузера сисходящий запрос: enter image description here

И, наконец, сообщение об ошибке из консоли браузера: enter image description here

Я не понимаю, почему этоговорит, что все поля пропущены, заголовок установлен правильно и выглядит хорошо для меня.

Включен код вида и URL-адреса все та же ошибка, Новый с той же проблемой:

class InvoiceUploadView(APIView):
    parser_classes=(MultiPartParser, FormParser)
    def get_permissions(self):
        return (permissions.AllowAny(),)

    def post(self, request):
        serializer=InvoiceUploadSerializer(data=request.POST)
        if serializer.is_valid():
            return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
        else:
            emessage=serializer.errors
            return Response({
                'status': 'Bad request',
                'message': emessage,
            }, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

0 голосов
/ 31 мая 2018

В вашем запросе POST отсутствует многочастная граница в заголовке Content-Type.Без этого возможно, что приложение не сможет проанализировать полезную нагрузку запроса - и проверка не удастся, поскольку данные будут отсутствовать.

Браузер обычно устанавливает заголовок и границу Content-Type для вас.Возможно, вы переопределяете это и сами устанавливаете заголовок Content-Type где-нибудь?Если да, отключите его и попробуйте сделать еще один запрос.

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