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

Django Allauth:如何在注册表单上添加更多自定义字段?

如何解决Django Allauth:如何在注册表单上添加更多自定义字段?

因此,我正在尝试在我的项目中使用 Django allauth 时制作自定义注册表单。我已经联系了他们的 documentation 并尝试将其应用到我的代码中。

在我的 forms.py 中,我已经把这个:

class MyCustomSignupForm(SignupForm):
cpf_cnpj = forms.CharField(max_length=14)
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)

def save(self,request):

    # Ensure you call the parent class's save.
    # .save() returns a User object.
    user = super(MyCustomSignupForm,self).save(request)

    # Add your own processing here.
    user.first_name = self.cleaned_data['first_name']
    user.last_name= self.cleanedD_data['last_name']
    user.cpf_cnpj = self.cleaned_data['cpf_cnpj']
    user.save()
    # You must return the original result.
    return user

我也根据需要将 ACCOUNT_FORMS = {'signup': 'mysite.forms.MyCustomSignupForm'} 放在 settings.py 中。

正如您在下面链接图片中看到的那样,它会向用户保存他们的名字和姓氏,但不会保存 cpf_cnpj 字段值。我应该怎么做才能将此保存给用户

Admin Panel - Users Signup Template

解决方法

在你的 forms.py 中添加这样的字段以在 django 提供的默认用户创建表单中添加一个额外的字段

from django.contrib.auth.forms import UserCreationForm
class MyCustomSignupForm(UserCreationForm):
    email = forms.EmailField(max_length=254,required=True,help_text='Required. Inform a valid email address.')
    cpf_cnpj = forms.CharField(max_length=14)
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)

    class Meta:
        model = User
        fields = ('username','email','cpf_cnpj',' first_name','last_name','password1','password2',)

并根据您的变化来改变views.py

from .forms import *

def register(request):
    if request.method == 'POST':
        form = MyCustomSignupForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('accounts:login')
    else:
        form = MyCustomSignupForm()
    return render(request,'register.html',{'form': form})

urls.py

 path('register/',views.register,name='register'),

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