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

问题描述 投票:0回答:1

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

在我的 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

django django-allauth
1个回答
0
投票

在 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', )

并根据改变你的观点。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})

url.py

 path('register/',views.register,name='register'),
© www.soinside.com 2019 - 2024. All rights reserved.