我有一个UpdateView,它将显示一个表单来创建用户配置文件或更新用户配置文件。它运行良好,但是由于某种原因我无法显示格式错误。基于我在模型表单中输入的ValidationErrors
,应该存在表单错误。我怀疑我的views.py是导致表单未显示错误的原因。
这是我的观点:
class ProfileSettings(UpdateView):
model = Profile
template_name = 'profile/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('profile:settings')
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
bio = form.cleaned_data['bio']
gender = form.cleaned_data['gender']
avatar = form.cleaned_data['avatar']
Profile.objects.update_or_create(user=self.request.user, defaults={'avatar':avatar, 'bio':bio, 'gender':gender})
return HttpResponseRedirect(self.success_url)
在模板中,我显示的错误如下:{{ form.avatar.errors }}
如果图像太小,则头像应显示错误,但不会。
答案 0 :(得分:1)
在这里,您没有将表单错误返回给模板。我认为您可以这样处理(覆盖form_valid
而不是post
方法):
class ProfileSettings(UpdateView):
model = Profile
template_name = 'profile/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('profile:settings')
def form_valid(self, form):
bio = form.cleaned_data['bio']
gender = form.cleaned_data['gender']
avatar = form.cleaned_data['avatar']
Profile.objects.update_or_create(user=self.request.user, defaults={'avatar':avatar, 'bio':bio, 'gender':gender})
return HttpResponseRedirect(self.success_url)
顺便说一句,存在一些缺陷,此代码为好。我们没有使用模型的形式是save
这里。最好是可以使用它。 form_valid
最初是这样做的。
另外,我认为最好在创建用户时使用signals创建用户个人资料。这是有关如何进行此操作的medium post。这样,您甚至不需要覆盖form_valid
。
使用的FormView预填充数据:
class ProfileSettings(FormView):
model = Profile
template_name = 'profile/settings.html'
form_class = ProfileForm
success_url = reverse_lazy('profile:settings')
def get_form_kwargs(self):
kwargs = super(ProfileSettings, self).get_form_kwargs()
kwargs['instance'] = self.request.user.profile # Profile object
return kwargs