我有一个 Django 自定义用户模型 MyUser
,其中包含一个额外的字段:
# models.py
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
age = models.PositiveIntegerField(_("age"))
# settings.py
AUTH_USER_MODEL = "web.MyUser"
# 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
渲染正确)后,我收到以下错误提示:
请问存储自定义用户模型的正确方法是什么? django-allauth: 0.12.0; django: 1.5.1; Python 2.7.2IntegrityError at /accounts/signup/
(1048, "Column 'age' cannot be null")
user.age = self.cleaned_data['age']
在某种程度上被评估为None
。你能验证一下这个值吗?还有,user
参数被发送到save
方法中是什么? - karthikrsave
方法中返回user
,也要写上return user
。 - Aamir Rindsave()
方法没有被执行。当在django-allauth/allauth/account/forms.py#269
中创建新用户时,会抛出异常。 - illagrenanIntegrityError
(完整性错误):“列'age'不能为空” - illagrenanclean
方法而不是save
方法。这样,在保存之前就可以捕获错误。我仍然觉得def save(self, user)
不正确。 - karthikrSignupForm
(请参见Github上的代码)。 方法save(self, user)
来自all-auth文档:“(...)此类应实现一个'保存'方法,接受新注册的用户作为其唯一参数。” - illagrenan