我想使用isValid验证表单,但是有一个问题,即时通讯找不到,这里有什么问题吗?顺便说一句,如果我只是检查user_form.is_valid并尝试更改密码,它将起作用但profile_form无法起作用
当我在cmd中使用print(profile_form.errors)时会显示 <ul class="errorlist"><li>email<ul class="errorlist"><li>This Field Cannot be left blank</li></ul></li><li>nomor_hp<ul class="errorlist"><li>This Field Cannot be left blank</li></ul></li><li>email2<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
这是我的看法
@login_required(login_url='pengurusan/signin')
def post_update(request, pk):
user = User.objects.get(id=pk)
userr = User.objects.filter(id=pk)
profilee = Profile.objects.filter(id=pk)
if request.method == 'POST':
#print(request.POST)
user_form = PasswordChangeForm(user = request.user , data=request.POST)
profile_form = ProfileForm(request.POST, instance=request.user)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
return render(request, 'pengurusan/index.html')
user_form = PasswordChangeForm(user = request.user , data=request.POST)
profile_form = ProfileForm(instance=user.profile)
context={
"user_form" : user_form,
"profile_form" : profile_form,
"user" : user,
"userr" : userr,
"profile" : user.profile,
"profilee" : profilee,
}
return render(request, 'pengurusan/update-form.html', context)
这是我的表格
class Meta:
model = User
fields = ('email', 'username', 'password')
widgets = { 'email' : forms.EmailInput(attrs={'class' : 'form-control form-control-user', 'id' : 'exampleInputEmail', 'placeholder' : 'Email Address', 'name' : 'email'}),
'username': forms.TextInput(attrs={'class' : 'form-control form-control-user', 'id' : 'exampleFirstName', 'placeholder' : 'username', 'name' : 'username'})
}
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['nama', 'nik', 'email', 'nomor_hp']
widgets = { 'nama': forms.TextInput(attrs={ 'id' : 'exampleFirstName', 'placeholder' : 'Name'}),
'nik' : forms.NumberInput(attrs={'id' : 'exampleLastName', 'placeholder' : 'Nomor Identitas Penduduk'}),
'email' : forms.EmailInput(attrs={'id' : 'exampleInputEmail', 'placeholder' : 'Email Address', 'name' : 'email'}),
'nomor_hp' : forms.NumberInput(attrs={'size':'4', 'maxlength':'12', 'class':'phone', 'placeholder' : 'Nomor Handphone'}),
}
这是我的模特
class Profile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, related_name='profile')
nama = models.CharField(max_length=30, blank=True)
nik = models.CharField(max_length=30, blank=True)
email = models.EmailField(max_length=75, blank=True)
nomor_hp = models.TextField(max_length=15, blank=True)
def __str__(self):
return self.user
如果您需要,这是我的urls.py
urlpatterns = [
url(r'^$', views.signin),
url(r'index/$', views.index),
url(r'signin/$', views.signin),
url(r'signup/$', views.signup),
url(r'signout/$', views.signout),
url(r'^(?P<pk>[0-9]+)/edit/$', views.post_update, name='post_update'),
path('activate/<uidb64>/<token>', views.VerificationView.as_view(), name="activate"),
path('request-reset-link', views.RequestPasswordResetEmail.as_view(), name="request-password"),
path('set-new-password/<uidb64>/<token>', views.CompletePasswordReset.as_view(), name="reset-user-password"),
]
在
profile_form = ProfileForm(request.POST, instance=request.user)
您传递了request.user,但您的ProfileForm是针对profil而不是user的,该实例是错误的,因此请按profil实例进行更改
profile_form = ProfileForm(request.POST, instance=request.user.profile)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句