python-3.x - 自定义 Django-Allauth 注册表单不添加新用户
问题描述
我尝试使用 allauth 创建一个自定义注册表单,但是当我在前端提交表单时,它会指向success_url
并且在管理面板中检查后未创建新用户。
# forms.py
from allauth.account.forms import SignupForm
class SimpleSignupForm(SignupForm):
mobile_number = PhoneNumberField(required=True)
first_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}), max_length=255, required=True)
last_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}), max_length=255, required=True)
address = AddressField(required=True)
type = forms.ModelChoiceField(queryset=UserType.objects.all())
def save(self, request):
user = super(SimpleSignupForm, self).save(request)
user.mobile = self.cleaned_data['mobile_number']
user.address = self.cleaned_data['address']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.type = self.cleaned_data['type']
user.save()
return user
def __init__(self, *args, **kwargs):
super(SimpleSignupForm, self).__init__(*args, **kwargs)
visibles = self.visible_fields()
visibles[0].field.widget.attrs['class'] = 'form-control'
# settings.py
ACCOUNT_FORMS = {'signup': 'my_app_path.forms.SimpleSignupForm'}
在模板文件中,我确保<form>
标签具有method='POST'
并且我包含{% csrf_token %}
在表单中。按钮也是aasubmit
类型。我还确保{{ form.as_p }}
在提交时具有所有必填字段。任何地方都不会弹出错误或警告。
解决方案
我希望这有帮助。我会建议你使用注册方法而不是保存
class CustomSignupForm(forms.Form):
first_name = forms.CharField(max_length=30, label='First Name')
last_name = forms.CharField(max_length=30, label='Last Name')
def __init__(self, *args, **kwargs):
super(CustomSignupForm, self).__init__(*args, **kwargs)
self.fields['first_name'].widget.attrs['placeholder'] = 'First Names'
self.fields['last_name'].widget.attrs['placeholder'] = 'Last Names'
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
推荐阅读
- php - Laravel 迁移:“找不到错误类”
- php - 使用其他用户保护的 Laravel Passport 身份验证
- python - python 将 https:// 添加到 url = sys.argv[1]
- python - 如何解决 ValueError: [E177] Ill-formed IOB input detected: an?
- java - 如何使用 cacerts 和 jks trustore togeser,
- javascript - 如何计算按钮以外的元素的点击次数?
- axios - 如何使用 axios-mock-adapter 和自定义错误对象模拟 HTTP404
- elasticsearch - 即使在成功插入文档后,ElasticSearch 计数 API 也会返回相同的数字
- excel - 将文本转换为日期格式为 yyyy/mm/dd
- ios - 我可以呈现全屏 ViewController,但仍然能够向下滑动,以返回父(启动器)ViewController