Django Rest Framework - Импорт CSV («Файл не был отправлен») - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь загрузить файл CSV в Django Rest Framework с помощью сериализатора.

Ниже приведено изображение, содержащее код для модели, представления и сериализатора, и вывод консоли, когда я пытаюсь отправить CSVfile.

Перед проверкой сериализатора, когда я проверяю с помощью print (serializer.initial_data), в сериализаторе есть файл, но как только сериализатор проверяет его, он сообщает, что файл не был отправлен.

models.py

class InventoryFile(models.Model):
    shop           = models.ForeignKey(Shop,on_delete=models.CASCADE)
    shop_inventory = models.FileField(upload_to='inventory/')

serializers.py

class InventoryFile_Serializer(serializers.ModelSerializer):
    class Meta:
        model = InventoryFile
        fields = ('shop_inventory',)

views.py

class InvertoryUpload(APIView):
    serializer_class = InventoryFile_Serializer
    parser_classes = [ MultiPartParser,FormParser ]

    def post(self,request):
        try:
            serializer = InventoryFile_Serializer(data=request.data)
            print(serializer.initial_data)

            if serializer.is_valid():
                print(serializer.data)
                return Response("Done")
            else:
                print(serializer.errors)
                return Response("Not Done")

        except Exception as e:
            return Response(str(e))  

Вывод

System check identified no issues (0 silenced).
January 30, 2019 - 11:22:06
Django version 2.1, using settings 'hoplet.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
<QueryDict: {'inventory': [<InMemoryUploadedFile: MOCK_DATA_2.csv (application/vnd.ms-excel)>]}>
{'shop_inventory': [ErrorDetail(string='No file was submitted.', code='required')]}
[30/Jan/2019 11:22:18] "POST /uploadinv HTTP/1.1" 200 10

Ответы [ 2 ]

0 голосов
/ 30 января 2019
Please try in this way        

urls.py
              urlpatterns = [
            url(r'^', include(router.urls)),
            url(r'^upload_file', InvertoryUpload.as_view())

        ]

        models.py

        class InventoryFile(models.Model):
            shop = models.ForeignKey(Shop,on_delete=models.CASCADE)
            shop_inventory = models.FileField(upload_to='inventory/')


        views.py

        from rest_framework.parsers import MultiPartParser, FormParser
        from rest_framework.generics import CreateAPIView

        class InvertoryUpload(CreateAPIView):
            serializer_class = InventoryFile_Serializer
            parser_classes = [ MultiPartParser, FormParser ]

        serializers.py

        class InventoryFile_Serializer(serializers.ModelSerializer):

            class Meta:
                model = InventoryFile
                fields = ('shop_inventory','shop')
0 голосов
/ 30 января 2019

Имя ключа файла в запросе inventory и имя ключа, который ищет сериализатор is shop_inventory.Они должны быть одинаковыми.Измените одну из них, и она должна работать.

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