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.

Вернуться на верх