如何解决form.is_valid在Django中始终返回False
我遇到了一个奇怪的错误。如果添加电子邮件字段,我将无法通过验证。如果仅对1个用户名字段进行验证,则一切正常。请告诉我,我在做什么错了?
文件forms.py
:
class UserUpdateForm(forms.ModelForm):
email = forms.EmailField(required=False)
def __init__(self,user,*args,**kwargs):
self.user = user
super(UserUpdateForm,self).__init__(*args,**kwargs)
if 'label_suffix' not in kwargs:
kwargs['label_suffix'] = '*'
self.fields['username'].widget = forms.TextInput(attrs={'class':'input-text'})
self.fields['email'].widget = forms.EmailInput(attrs={'class':'input-text'})
class Meta:
model = User
fields = ("username","email",)
文件views.py
:
def get_context_data(self,request):
self.object = get_object_or_404(Profile,slug=self.kwargs['slug'])
ctx={}
ctx['UserUpdateForm']=UserUpdateForm(request.POST if "UserUpdateForm" in request.POST else None,instance=request.user)
сtx['comments']=Comments.objects.filter(profile=self.object)
return ctx
def post(self,request,**kwargs):
if request.method=='POST':
if "UserUpdateForm" in request.POST:
form=UserUpdateForm(request.POST)
if form.is_valid():
user=User.objects.get(username=self.request.user)
user.username=form.cleaned_data.get('username')
user.email=form.cleaned_data.get('email')
user.save()
obj=Profile.objects.get(user__username=user.username)
return HttpResponseRedirect(reverse_lazy('profile',kwargs={'slug': obj.slug},))
return render(request,self.template_name,self.get_context_data(request))
解决方法
您可以使用额外的参数user
来构造表单:
class UserUpdateForm(forms.ModelForm):
def __init__(self,user,*args,**kwargs):
# …
,这意味着构造表单时的第一个参数是用户。因此,您应该通过一个用户:
form=UserUpdateForm(request.user,request.POST)
,或者如果您要编辑用户对象:
form=UserUpdateForm(request.user,request.POST,instance=request.user)
但是,通过用户并没有多大意义,因为就目前所见,您永远不会在表单中使用.user
属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。