原文始发于:Django图片管理的表单类详解
一 编辑mysite/image/forms.py文件
from django import forms from django.core.files.base import ContentFile from slugify import slugify from urllib import request from .models import Image class ImageForm(forms.ModelForm): class Meta: model = Image fields = ('title', 'url', 'description') # 主要是处理某个字段,函数的命名规定是clean_<fieldname>,其中fieldname就是 # 数据模型类中字段名称 def clean_url(self): # 获取url字段的值 url = self.cleaned_data['url'] # 图像的扩展类型 valid_extensions = ['jpg', 'jpeg', 'png'] # 过滤得到扩展类型 extension = url.rsplit('.', 1)[1].lower() if extension not in valid_extensions: raise forms.ValidationError("不是图像.") # 返回url的地址 return url def save(self, force_insert=False, force_update=False, commit=True): # 将表单的数据保存到image对象 image = super(ImageForm, self).save(commit=False) # 获取图像的url地址 image_url = self.cleaned_data['url'] # 要保存的图像名称 image_name = '{0}.{1}'.format(slugify(image.title), image_url.rsplit('.', 1)[1].lower()) # 返回要保存图像的数据 response = request.urlopen(image_url) # 返回的结果保存到本地,并按照约定名称给图片命名 image.image.save(image_name, ContentFile(response.read()), save=False) if commit: image.save() return image