在项目中有以下规则:图像字段是可选的,默认图像是用户的无法通知的案例。图像由用户在django中发送,并且必须具有尺寸(宽度> = 900,高度> = 400)。
我正在尝试验证admin.py中的维度,但是当我尝试在imagefield中具有默认参数时进行注册时会出现问题。
即使它在目录中,也会发现找不到图像错误。没有admin.py中的验证功能,它可以正常工作。
models.py
class EventForm(forms.ModelForm):
class Meta:
model = Event
fields = '__all__'
def clean_banner(self):
banner = self.cleaned_data.get('banner')
if banner:
img = Image.open(banner)
width, height = img.size
max_width = 900
max_height = 400
if width < max_width or height < max_height:
raise forms.ValidationError(
'Image is incorrectly sized:% s x% s pixels. Please insert an image with% s x% s pixels.'
% (width, height, max_width, max_height))
if len(banner) > (3 * 1024 * 1024):
raise forms.ValidationError('Very large image file (maximum of 3MB).')
name_img, ext = banner.name.split('.')
if not (ext.lower() in ['png', 'jpg', 'jpeg']):
raise forms.ValidationError('Please use the image in JPG, JPEG or PNG format.')
else:
raise forms.ValidationError('The loaded image could not be read.')
return banner
admin.py
/Home/About
/Home/Contact
/Identity/Account/Login
/Identity/Account/Register
如何在验证中考虑默认图像?
答案 0 :(得分:0)
上传的文件是Django InMemoryUploadedFile
文件,它尚未保存在您的服务器中,open()
需要该文件是物理存在的,还是string bytes
。为此,您需要包PIL.Image
和io.BytesIO
from io import BytesIO as StringIO
from PIL import Image
img = Image.open(StringIO(banner.read()))
现在,img.size
是包含width
和height
width, height = img.size