我正在嘗試創建一個接受(鍵/值)數據和多個文件的端點。用戶可以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))
添加回答
舉報
0/150
提交
取消