我使用UserProfile模型扩展了标准用户模型,包含以下字段:
但是使用这个表单创建新用户时:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
gender = models.CharField(max_length=30)
info = models.CharField(max_length=30)
但是使用这个表单创建新用户时:
class SignupForm(forms.Form):
first_name = forms.CharField(max_length=30, label='First name')
last_name = forms.CharField(max_length=30, label='Last name')
info = forms.CharField(max_length=30, label='info')
def save(self, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
profile = UserProfile()
profile.user = user
profile.info = self.cleaned_data['info']
profile.save()
user.profile = profile
user.save()
在数据库中,“info”始终为空(“”),其他字段也是如此,除了id。
标准属性(名字、姓氏)会被正确保存。
我尝试进行调试,发现错误与SQL无关,因为查询并没有问题:
INSERT INTO "user_profile" ("user_id", "info") VALUES (17, '',
'') RETURNING "user_profile"."id";
然而,当我使用pdb调试user.profile.info的值时,它能够正常工作:
(Pdb) user.profile.info
u'info passed from form'
ACCOUNT_SIGNUP_FORM_CLASS = 'your_app.forms.SignupForm'
? - illagrenanself.cleaned_data['info']
包含了我在表单中输入的数据(所以我认为你的问题与 django-allauth 无关)。也许你可以尝试如下语句:profile.info = u"some_test_data"
。 - illagrenandef save(self, user)
替换为def signup(self, request, user)
? - andrea.ge