我正在尝试使用密码策略创建应用:必须至少8个字符,并且它们将具有到期日期。
我在forms.py中创建了一个扩展SetPasswordForm的类,让我设置一个最小密码长度。
对于到期日期,我创建了一个名为bUser的模型,该模型将OneToOne与django.auth.contrib的用户模型相关联。
在这个模型(bUser)中,我想保存上次更改密码的时间,因此我尝试编辑表单的保存方法,以便每次更改密码时更新字段。
forms.py
class SetPasswordWithMinLengthForm(SetPasswordForm):
min_password_length = 8
def clean_new_password1(self):
" Minimum length "
password1 = self.cleaned_data.get('new_password1', '')
if len(password1) < self.min_password_length:
raise forms.ValidationError("Password must have at least %i characters" % self.min_password_length)
else:
return password1
def save(self,commit = True):
new_pass = super(SetPasswordWithMinLengthForm, self).save(commit = False)
if commit:
new_pass.save()
usr = bUser.objects.get(user=new_pass)
if usr:
usr.last_pass_set_on = date.today
usr.save()
return new_pass
models.py
class bUser(models.Model):
user = models.OneToOneField(User)
last_pass_set_on = models.DateField(auto_now_add=True)
问题是当我尝试更改用户的密码时,出现以下错误
TypeError at /password/change/
expected string or buffer
具体来说,在我在bUser实例上保存更新的行中。如果我评论这一行,它可以工作(但当然,它不会改变bUser模型上的值)
usr.save()
我尝试使用&#34; print(usr.last_pass_set_on)&#34;在控制台中进行打印,并且打印正确。
我可以在表单的save方法中更新相关实例吗? 我做错了什么?
提前致谢!!