Я не могу сохранить файл через модель после кодирования base64 в django-rest

В моей модели есть поля с именами image1 и image2. При создании я получаю base64 содержимое файлов (я отправлю это на удаленный api для другого действия). Когда я делаю преобразование base64, я не могу записать в свою модель. Выдается ошибка типа;

Ошибка значения: Операция ввода/вывода в закрытый файл

models.py

class HelpDeskDemandModel(models.Model):
    code = models.CharField(max_length=50, unique=True, null=False, blank=False)
    image1 = models.ImageField(upload_to="municy_helpdesk_images/%Y/%m/%d/", null=True, blank=True)
    image2 = models.ImageField(upload_to="municy_helpdesk_images/%Y/%m/%d/", null=True, blank=True)

serializers.py

class HelpDeskDemandSerializer(serializers.ModelSerializer):

    class Meta:
        model = HelpDeskDemandModel
        fields = [
            'code', 'image1', 'image2'
        ]


    def create(self, validated_data):
        base64_files = []
        for i in range(1, 3):
            img = validated_data.get(f"image{i}", None)

            if img:
                with img.open('rb') as f:
                    base64_content = base64.b64encode(f.read()).decode()
                base64_files.append(base64_content)


        # the error occurs on this line
        instance = HelpDeskDemandModel.objects.create(**validated_data)

        return instance

вот как я решил эту проблему. Я создал новый объект с ContentFile и передал этот объект в модель

validated_data.update({f"image{i}": ContentFile(file_content_byte, img.name)})

serializers.py

class HelpDeskDemandSerializer(serializers.ModelSerializer):

    class Meta:
        model = HelpDeskDemandModel
        fields = [
            'code', 'image1', 'image2'
        ]


    def create(self, validated_data):
        base64_files = []
        for i in range(1, 3):
            img = validated_data.get(f"image{i}", None)

            if img:
                with img.open('rb') as f:
                file_content_byte=f.read()
                base64_content = base64.b64encode(file_content_byte).decode()
                validated_data.update({f"image{i}": ContentFile(file_content_byte, img.name)})
                base64_files.append(base64_content)


        # the error occurs on this line
        instance = HelpDeskDemandModel.objects.create(**validated_data)

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