ValueError: Операция ввода/вывода в закрытый файл в Django и DRF при сохранении данных в модель
Я пытаюсь сохранить файл в экземпляре Django следующим образом:
class SomeName(ListCreateAPIView):
queryset = fileUpload.objects.all()
serializer_class = fileUploadSerializer
def create(self, request, *args, **kwargs):
file = serializer.validated_data["file"]
object = fileUpload.objects.create(
file_local_storage=file,
file=file,
)
.....
Моделями являются
class fileUpload(models.Model):
fileName = models.CharField(max_length=200, unique=True, blank=True)
file = models.FileField(storage=PrivateMediaStorage())
file_local_storage = models.FileField(upload_to="uploads/", blank=True)
Ошибка, которую я получаю
Ошибка значения: Операция ввода/вывода в закрытый файл в Django и DRF при выводе данные
Вам нужно добавить логику сохранения файлов в сериализатор, а не в представление
class SomeName(ListCreateAPIView):
queryset = fileUpload.objects.all()
serializer_class = fileUploadSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
В сериализаторе,
class fileUploadSerializer(serializers.ModelSerializer):
upload_file = serializers.FileField(
max_length = 1000000, allow_empty_file = False, write_only = True)
class Meta:
fields = ('upload_file ', 'media', 'file', 'file_local_storage')
extra_kwargs = {
'file': {'read_only': True},
'file_local_storage': {'read_only': True}
}
def create(self, validated_data):
file_data = validated_data.pop('upload_file')
fileUploadObj = fileUpload(**validated_data)
fileUploadObj.file = file_data
fileUploadObj.file_local_storage = file_data
fileUploadObj.save()
return fileUploadObj
А во фронтенде нужно загрузить файл с ключом с именем upload_file
, а не file
.