Django模型存储Base64文件报错:无法序列化ContentFile对象
问题原因及修复方案
你的错误出在直接把ContentFile对象传给模型的save()方法,Django模型的save()方法不接受这种参数,它会尝试序列化这个对象,所以触发了TypeError。
正确操作步骤
- 将ContentFile对象赋值给模型对应的文件字段,而非传给save()
- 调用无参数的save()方法保存模型实例
修正后的代码
import base64 from django.core.files.base import ContentFile # 假设你的模型类是SomeModel,文件字段名为image_file somemodel = SomeModel() # 也可以是从数据库获取的已有实例,比如SomeModel.objects.get(id=1) file = "data:image/png;base64,iVBORw0KGgoAAAANSUhEU..." format, imgstr = file.split(';base64,') ext = format.split('/')[-1] data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext) # 关键:把ContentFile赋值给模型的文件字段 somemodel.image_file = data # 调用无参数的save()完成保存 somemodel.save()
补充说明
要确保你的模型中定义了正确的文件字段,示例如下:
from django.db import models class SomeModel(models.Model): image_file = models.ImageField(upload_to='images/') # 普通文件用FileField即可
内容的提问来源于stack exchange,提问作者anoleose
相关产品推荐
相关产品推荐

