亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django REST用數據上傳多個文件

Django REST用數據上傳多個文件

楊魅力 2022-10-25 10:19:40
我正在嘗試創建一個接受(鍵/值)數據和多個文件的端點。用戶可以serial連同他的請求一起發送多個文件。上傳的文件必須保存FileModel在RequestModel. 問題是當我發送RequestSerializer無法解決的請求時files,我收到有關缺少該files字段的錯誤。#tests.pydef test_create_request_with_files(self):    with tempfile.NamedTemporaryFile() as file:        file.write(b"SomeFakeData")        file.seek(0)        request = {            'files': [file],            'serial': "SomeSerial",        }        res = self.client.post(            '/CreateRequest/', request, format='multipart')        print(res.data)        self.assertEqual(res.status_code, status.HTTP_201_CREATED)#---------------------------------------------------------------------------# models.pyclass FileModel(models.Model):    file = models.FileField(upload_to='upload_files')class RequestModel(models.Model):    serial = models.CharField(max_length=100)    files = models.ManyToManyField('FileModel', blank=True)    def __str__(self):        return str(self.id)#---------------------------------------------------------------------------# serializers.pyclass FileSerializer(serializers.ModelSerializer):    class Meta:        model = FileModel        fields = '__all__'        read_only_fields = ('id',)class RequestSerializer(serializers.ModelSerializer):    files = FileSerializer(many=True)    def create(self, validated_data):        files = validated_data.pop('files')        request_model = RequestModel.objects.create(**validated_data)        for file in files:            file_model = FileModel.objects.create(file=file)            request_model.files.add(file_model)        request_model.save()        return request_model    class Meta:        model = RequestModel        fields = '__all__'        read_only_fields = ('id')#---------------------------------------------------------------------------#views.pyclass RequestList(generics.ListCreateAPIView):    queryset = RequestModel.objects.all()    serializer_class = RequestSerializer    parser_classes = (FormParser, MultiPartParser)
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

這不是 django 的問題。使用時不能傳遞對象multipart/form-data。列表將轉換為[object Object]字符串。而是嘗試:file1等file2...


我會使用動態解析器,例如:


        count = 1

        files = []

        f = request.data.get('file{}'.fomat(count))

        while f is not None:

            files.append(f)

            count += 1

            f = request.data.get('file{}'.fomat(count))


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號