表单上的Django保存方法 - 更新一对一模型关联

时间:2015-07-07 07:01:40

标签: python django django-1.8

我正在尝试使用密码策略创建应用:必须至少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方法中更新相关实例吗? 我做错了什么?

提前致谢!!

0 个答案:

没有答案