Python 在我创建自定义注册表单模型后,注册表单显示的字段太多

Python 在我创建自定义注册表单模型后,注册表单显示的字段太多,python,django,Python,Django,我正试着做一份定制登记表,但遇到了麻烦 Myforms.py具有以下功能: class RegisterForm(UserCreationForm): ''' Form that makes user using just email as username ''' error_messages= { "password_mismatch": _("Passwords do not match."), "duplicate_emai

我正试着做一份定制登记表,但遇到了麻烦

My
forms.py
具有以下功能:

class RegisterForm(UserCreationForm):
    '''
    Form that makes user using just email as username
    '''
    error_messages= {
        "password_mismatch": _("Passwords do not match."),
        "duplicate_email": _("Email already exists."),
        "unique": _("Email already exists"),
    }
    register_username=  forms.EmailField(label=_("Email"), widget=forms.TextInput(attrs={"placeholder":"Email"}))
    register_password1= forms.CharField(label=_("Password"), widget=forms.PasswordInput(attrs={"placeholder":"Password"}))
    register_password2= forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput(attrs={"placeholder":"Confirm password"}))

    def clean_username(self):
            username = self.cleaned_data["username"]
            try:
                User._default_manager.get(username=username)

                #if the user exists, then let's raise an error message
                raise forms.ValidationError(self.error_messages['duplicate_email'],  #user my customized error message
                                            code='duplicate_email',   #set the error message key
                )
            except User.DoesNotExist:
                return username # great, this user does not exist so we can continue the registration process

    class Meta:
        model=  User
        fields= ("username",)
我的
views.py
如下所示:

def login_register(request, template="pages/login_register.html"):
    registration_form= RegisterForm()
    return render(request, template, {"registration_form": registration_form})
<form method="post">
 <input type="hidden" name="csrfmiddlewaretoken" value="CSRF-TOKEN-HERE">
 <p><input autofocus="" id="id_username" maxlength="150" name="username" type="text" required=""></p>
 <p><input id="id_password1" name="password1" type="password" required=""></p>
 <p><input id="id_password2" name="password2" type="password" required=""></p>
 <p><input id="id_register_username" name="register_username" placeholder="Email" type="text" required=""></p>
 <p><input id="id_register_password1" name="register_password1" placeholder="Password" type="password" required=""></p>
 <p><input id="id_register_password2" name="register_password2" placeholder="Confirm password" type="password" required=""></p> 
 <button class="btn btn-primary" type="submit">Register</button>
</form>
这导致我的注册表出现在
login\u register.html
中,呈现如下:

def login_register(request, template="pages/login_register.html"):
    registration_form= RegisterForm()
    return render(request, template, {"registration_form": registration_form})
<form method="post">
 <input type="hidden" name="csrfmiddlewaretoken" value="CSRF-TOKEN-HERE">
 <p><input autofocus="" id="id_username" maxlength="150" name="username" type="text" required=""></p>
 <p><input id="id_password1" name="password1" type="password" required=""></p>
 <p><input id="id_password2" name="password2" type="password" required=""></p>
 <p><input id="id_register_username" name="register_username" placeholder="Email" type="text" required=""></p>
 <p><input id="id_register_password1" name="register_password1" placeholder="Password" type="password" required=""></p>
 <p><input id="id_register_password2" name="register_password2" placeholder="Confirm password" type="password" required=""></p> 
 <button class="btn btn-primary" type="submit">Register</button>
</form>

登记册

我只想使用最后三个
input
标记。我的目标是让我的注册表有三个字段:电子邮件、密码和密码确认。Django为什么要加载三个额外的top
输入
字段,以及如何防止这种情况发生?

用户创建表单
已经提供了密码和密码确认。因此,您只需覆盖用户名字段,重命名register\u username:

class RegisterForm(UserCreationForm) :
    username = forms.EmailField(label=_("Email"), widget=forms.TextInput(attrs={"placeholder":"Email"}))

    def clean_username(self):
        username = self.cleaned_data["username"]
        try:
            User._default_manager.get(username=username)

            #if the user exists, then let's raise an error message
            raise forms.ValidationError(self.error_messages['duplicate_email'],  #user my customized error message
                                        code='duplicate_email',   #set the error message key
            )
        except User.DoesNotExist:
            return username # great, this user does not exist so we can continue the registration process

    class Meta:
        model=  User
        fields = ("username",)