加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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类)的子代

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读