Django 2.2中sorl-thumbnail无迁移文件,表单无法上传图片
sorl-thumbnail未生成迁移文件及前端表单无法上传图片的解决办法
一、解决迁移文件未生成的问题
sorl-thumbnail自带迁移文件,未生成大概率是迁移命令执行的问题,按以下步骤操作:
- 确认
settings.py的INSTALLED_APPS中已正确添加sorl.thumbnail,检查拼写无错误 - 执行指定应用的迁移生成命令:
python manage.py makemigrations sorl.thumbnail - 应用迁移到数据库:
python manage.py migrate
如果执行后仍无迁移文件,可尝试删除项目根目录下自动生成的空migrations文件夹(保留自定义app的迁移文件),再重新执行上述命令。
二、解决前端表单无法上传图片的问题
admin能正常上传但前端不行,核心原因是前端表单未正确配置文件上传的必要条件:
- 前端表单标签必须添加
enctype="multipart/form-data"属性,示例:<form method="POST" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">提交</button> </form> - 视图函数处理POST请求时,必须将
request.FILES传入表单实例,示例:from django.shortcuts import render, redirect from .forms import MyImageForm def upload_image(request): if request.method == 'POST': # 必须传入request.FILES才能接收上传的文件 form = MyImageForm(request.POST, request.FILES) if form.is_valid(): form.save() return redirect('success_page') else: form = MyImageForm() return render(request, 'upload.html', {'form': form}) - 确认模型中使用的图片字段配置正确,如果是用sorl-thumbnail的自定义字段,需正确导入:
from sorl.thumbnail.fields import ImageField class MyModel(models.Model): image = ImageField(upload_to='images/')
三、版本兼容性说明
当前使用的Python 3.9、Django 2.2.16、Pillow 9.3.0、sorl-thumbnail 12.9.0版本组合是兼容的,无需调整版本。
内容的提问来源于stack exchange,提问作者Emelian Pugachev
相关产品推荐
相关产品推荐

