我有类别
的以下模型class Category(models.Model):
name = models.CharField(max_length=30)
is_active=models.BooleanField()
photo=models.ImageField(upload_to='category')
def __unicode__(self):
name = str(self.name)
return name
def image(self):
return self.photo or 'DEFAULT_PIC.jpg'
class Meta:
permissions = (
('category','Category'),
('view_category', 'View category'),
)
我的表单类如下
class categoryForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={'class':'box'}),max_length=32,label='Category',required=True)
is_active = forms.BooleanField(required=False)
id = forms.CharField(widget=forms.HiddenInput,required=False)
photo = forms.FileField(
required=False,
label='Select an Image',
help_text='max. 4 megabytes'
)
它非常适合插入和更新两者,现在我正在尝试加载已经在表单中上传的图像(假设我已经添加了一个带图像的类别,现在我想上传另一个图像,所以我我试图显示以前上传图片的预览)
我在视图中传递了数据,并尝试了几种形式的黑客
formdata = categoryForm({'name':p.name,'is_active':p.is_active,'id':p.id,'photo':p.image()})
在表格中我做了如下修改
def __init__(self, data=None, **kwargs):
# pass
super(categoryForm, self).__init__(data, **kwargs)
if self.data['photo']!='':
self.fields['uploaded_photo'] =forms.CharField(widget=forms.TextInput,required=False,label=mark_safe('<img src="/media/%s" height="100">'%(self.data['photo'])))
#self.fields['uploaded_photo'].widget.attrs['value']=self.data['photo']
现在它可以完美地显示以前在标签上上传的图像。
之后我试图上传另一张图片,但显示以下错误
TypeError at /update/category/
init ()最多需要2个参数(给定3个)
处理图片上传的脚本如下
formdata = categoryForm(request.POST,request.FILES)
if formdata.is_valid():
cd = formdata.cleaned_data
p1=Category()
p1.id=cd['id']
p1.name=cd['name']
p1.is_active=cd['is_active']
p1.photo=cd['photo']
p1.save()
请让我知道这里发生了什么
答案 0 :(得分:1)
使用ImageField
尝试让生活更轻松类ImageField(** kwargs)¶
错误消息键:必需,无效,缺失,空,invalid_image
使用ImageField需要安装Python Imaging Library。
在表单上使用ImageField时,还必须记住将文件数据绑定到表单。
查看完整的文档here