ImageField 会自动处理图片的宽高。你不需要做任何事情。
- 更改项目设置
将这些代码添加到项目目录中setting.py的末尾
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
然后改项目目录下的urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path(...),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- 提供两个整数字段来存储图像的宽度和高度
models.py
class Picture(models.Model):
image = models.ImageField(upload_to='images/', width_field = 'image_width', height_field='image_height')
image_width = models.IntegerField(default=0)
image_height = models.IntegerField(default=0)
- 创建一个表单,不要包含“image_width”和“image_height”,它们应该是隐藏和自动填充的。
forms.py
class PictureForm(forms.Form)
image = forms.ImageField()
- 在视图中验证和处理表单并将数据保存到数据库中
views.py
def createPicture(request):
form = PictureForm(request.POST, request.FILES)
if form.is_valid():
picture = Picture()
picture.image = form.cleaned_data['image']
picture.save()
return HttpResponseRedirect(reverse('picture-list'))
else:
form = PictureForm()
return render(request, 'template_file', {'form' : form})