【发布时间】:2013-07-12 03:42:06
【问题描述】:
我有 django custom user model MyUser 有一个额外的字段:
# models.py
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
age = models.PositiveIntegerField(_("age"))
# settings.py
AUTH_USER_MODEL = "web.MyUser"
我也有根据to these instructionscustom all-auth Signup form class:
# forms.py
class SignupForm(forms.Form):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
age = forms.IntegerField(max_value=100)
class Meta:
model = MyUser
def save(self, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.age = self.cleaned_data['age']
user.save()
# settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'web.forms.SignupForm'
提交SignupForm(属性MyUser.age 的字段正确呈现)后,我收到此错误:
/accounts/signup/ 处的 IntegrityError
(1048, "列'年龄'不能为空")
存储自定义用户模型的正确方法是什么?
django-allauth:0.12.0; django:1.5.1; Python 2.7.2
【问题讨论】:
-
我的猜测是
user.age = self.cleaned_data['age']正在评估None不知何故..你能验证这个值吗?什么是user参数被发送到save方法? -
您必须从
save方法也返回userreturn user -
@karthikr 我发现方法
save()没有执行。在django-allauth/allauth/account/forms.py#269中创建新用户时引发异常。 -
IntegrityError"列'年龄'不能为空" -
@illagrenan 我建议覆盖表单的
clean而不是save方法。这样,错误可以在保存之前被捕获。我还是觉得def save(self, user)不对
标签: python django django-models django-allauth