Я не могу сохранить файл через модель после кодирования 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