python – Django allauth使用注册表单保存自定义用户字段
发布时间:2020-12-20 13:39:54 所属栏目:Python 来源:网络整理
导读:我使用UserProfile模型扩展了标准用户模型,包括以下字段: class UserProfile(models.Model): user = models.OneToOneField(User,related_name='profile') gender = models.CharField(max_length=30) info = models.CharField(max_length=30) 但在使用此表单
我使用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' 解决方法
应首先保存自定义表单,但将提交设置为false,以便信息不会到达数据库,之后可以保存用户字段,然后您可以设置一对一字段链接两个表终于救了
class SignupForm(forms.Form): def signup(self,user): profile = UserProfile() profile.save(commit = False) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.save() user.profile = profile profile.user = user profile.info = self.cleaned_data['info'] profile.save() 顺便说一句,我们正在设置profile.user not user.profile profile是在这种情况下继承父(User类)的子代 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |