Django Allauth:如何在注册表单上添加更多自定义字段?
Django Allauth: How to add more custom fields on signup form?
因此,我正在尝试在我的项目中使用 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'),
因此,我正在尝试在我的项目中使用 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'),