微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数据从一个自定义注册表单保存到 django-allauth 中的多个数据库表

如何解决将数据从一个自定义注册表单保存到 django-allauth 中的多个数据库表

我有一个使用 django-allauth 的自定义注册表单。我有一个 Member 模型,它与 Django 的 User 模型具有一对一的关系。此外,我还有一些其他表与 Member 有外键关系(在下面的示例中,我只展示了一个Phone

目前,我无法获取用户自定义注册表单的 phone_number 字段中输入的数据以保存到 Phone 数据库表。因此,我的问题是:如何让某人使用自定义注册表单进行注册并将他们输入的数据保存到多个数据库表中?

models.py

class Member(models.Model):
    user = models.OnetoOneField(User,on_delete=models.CASCADE)
    first_name = models.CharField(max_length=255,default='')
    last_name = models.CharField(max_length=255,default='')
    middle_name = models.CharField(max_length=255,default='',null=True,blank=True)

def member_receiver(sender,instance,created,*args,**kwargs):
    if created:
        member = Member.objects.create(user=instance)
    else:
        instance.member.save()

post_save.connect(member_receiver,sender=User)

class Phone(models.Model):
    phone_number = models.CharField(max_length=20)
    member = models.ForeignKey(Member,on_delete=models.CASCADE,related_name='member_phone')

    def __str__(self):
        return self.phone_number

forms.py

class CustomSignupForm(SignupForm): 
    first_name = forms.CharField(label='First name*',max_length=255)
    middle_name = forms.CharField(label='Middle name',max_length=255,required=False)
    last_name = forms.CharField(label='Last name*',max_length=255)
    phone_number = forms.CharField(label='Phone number',max_length=20,required=False)
    
    class Meta:
        model = Member
        fields = [
            'first_name','middle_name','last_name',]
    
    def __init__(self,**kwargs):
        super(CustomSignupForm,self).__init__(*args,**kwargs)
        for fieldname,field in self.fields.items():
            field.widget.attrs.update({
                'class': 'form-control','placeholder': ''
            })

    @transaction.atomic
    def save(self,request):
        user = super(CustomSignupForm,self).save(request)

        user.member.first_name = self.cleaned_data['first_name']
        user.member.middle_name = self.cleaned_data['middle_name']
        user.member.last_name = self.cleaned_data['last_name']

# Not sure how to format the line below so the data actually gets saved to the database

        user.member.phone_number = self.cleaned_data['phone_number'] 
        
        user.save()
        return user

任何帮助将不胜感激,谢谢!

编辑

我发现这个问题有些帮助,因为它说明了我想要完成的任务:How can I have the equivalent of django's admin inlines in a modelform?

我现在意识到我可以有多个表单对象,但只有一个用户用来注册的“表单”。然而,即使在 Django 文档中更深入地查看内联表单集之后,我仍然无法弄清楚如何正确构建我的表单和我的视图(尤其是因为我正在合并 allauth)。

此外,以下博客文章我有所帮助,但它们仍然没有回答我的问题(或者让我找到了一个没有错误解决方案):

https://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/ https://dev.to/zxenia/django-inline-formsets-with-class-based-views-and-crispy-forms-14o6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。