我基于几个ModelForm
元素创建了一个表单.所有字段都正常工作,不包括
ImageField
.由于缺少ImageField form.is_valid()
总是返回False
- 即使我传递request.FILES
给表单.
为什么带有ImageField的表单始终无效/为空?
形式
class UserProfileForm2(forms.ModelForm): class Meta: model = models.UserProfile fields = ['description', 'picture'] class LocationForm(forms.ModelForm): class Meta: model = models.Location fields = ['city', 'state', 'country'] class UserForm(forms.ModelForm): class Meta: model = registration_models.User fields = ['first_name', 'last_name']
楷模
class Location(models.Model): city = models.CharField(max_length=100) state = models.CharField(max_length=100) country = models.CharField(max_length=100) def __unicode__(self): return ' - '.join([self.city, self.state, self.country]) class UserProfile(models.Model): authenticationuser = fields.AutoOneToOneField(AuthUser) description = models.TextField() picture = models.ImageField(upload_to='uploaded_files/', null=True) location = models.ForeignKey(Location, null=True) appear_in_public_ranking = models.BooleanField(default=True) def __unicode__(self): return self.authenticationuser.username
视图
@login_required def changeprofile(request): form = None # user posted his new profile settings if request.method == 'POST': user_form = myforms.UserForm(request.POST) user_profile_form = myforms.UserProfileForm2(request.POST, request.FILES) location_form = myforms.LocationForm(request.POST) forms_are_invalid = not (user_form.is_valid() and user_profile_form.is_valid() and not location_form.is_valid()) if forms_are_invalid: forms = {'user_form':user_form, 'user_profile_form':user_profile_form, 'location_form':location_form} return shortcuts.render(request, 'changeprofile.html', forms) location_form.save() user_form.save() user_profile_form.save() return HttpResponseRedirect('/profile') else: forms = {'user_form':user_form, 'user_profile_form':user_profile_form, 'location_form':location_form} return shortcuts.render(request, 'changeprofile.html', forms)
模板
Aamir Adnan.. 6
如果您的表单包含文件输入,那么您必须enctype
在表单中设置为:
如果您的表单包含文件输入,那么您必须enctype
在表单中设置为:
<form action="{% url 'changeprofile' %}" method="post" enctype="multipart/form-data">
否则request.FILES
将永远是空的.