首页 > 解决方案 > 自定义 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 }}在提交时具有所有必填字段。任何地方都不会弹出错误或警告。

标签: python-3.xdjangodjango-formsdjango-allauth

解决方案


我希望这有帮助。我会建议你使用注册方法而不是保存

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()

推荐阅读