Django 密码字段占位符

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

我尝试在我的注册表单中启用占位符,其中包含 4 个字段:电话、电子邮件、密码 1、密码 2。对于前两个字段全部正确,但对于密码字段则不起作用。

forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from customuser.models import User
from django.forms import TextInput,EmailInput,PasswordInput

class SignUpForm(UserCreationForm):    


    class Meta:
        model = User
        fields = ('phone', 'email', 'password1', 'password2', 'is_client','is_partner')
        widgets = {
            'email': EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email adress'}),
            'phone': TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone number  +79011234567'}),
            'password1': PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password from numbers and letters of the Latin alphabet'}),
            'password2': PasswordInput(attrs={'class': 'form-control', 'placeholder': '
Password confirmation'}),

        }
django
4个回答
8
投票

Meta.widgets
选项不适用于表单中声明的字段。请参阅文档中的注释。在这种情况下,
password1
password2
UserCreationForm
上声明(它们不是模型字段),因此您不能在
widgets
中使用它们。

您可以在

__init__
方法中设置小部件:

class SignUpForm(UserCreationForm):    
    class Meta:
        model = User
        fields = ('phone', 'email', 'is_client', 'is_partner')
        widgets = {
            'email': EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email adress'}),
            'phone': TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone number  +79011234567'}),
    }

    def __init__(self, *args, **kwargs):
        super(SignUpForm, self).__init__(*args, **kwargs)
        self.fields['password1'].widget = PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password from numbers and letters of the Latin alphabet'})
        self.fields['password2'].widget = PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password confirmation'})

4
投票

这段代码运行良好

class SignUpForm(UserCreationForm):    
    password1 = forms.CharField(max_length=16, widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password from numbers and letters of the Latin alphabet'}))
    password2 = forms.CharField(max_length=16, widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password confirm'}))
    class Meta:
        model = User
        fields = ('phone', 'email', 'password1', 'password2', 'is_client','is_partner')
        widgets = {
            'email': EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email adress'}),
            'phone': TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone number format +79011234567'}),


        }

1
投票

我测试了@Alasdair 的解决方案并以这种方式为我工作:

from django import forms
from django.contrib import auth
from django.contrib.auth.forms import UserCreationForm
from django.utils.translation import ugettext_lazy as _


class RegistrationForm(UserCreationForm):
    first_name = forms.CharField(label=_("First name"), widget=forms.TextInput(attrs={'placeholder': _("First name")}))
    email = forms.EmailField(label=_("Email"), widget=forms.TextInput(attrs={'placeholder': _("Email")}))

    class Meta(UserCreationForm.Meta):
        model = auth.get_user_model()
        fields = [
            'first_name',
            'email',
            'password1',
            'password2'
        ]

    def __init__(self, *args, **kwargs):
        super(InviteRegistrationForm, self).__init__(*args, **kwargs)
        self.fields['password1'].widget = forms.PasswordInput(attrs={'placeholder': _("Password")})
        self.fields['password2'].widget = forms.PasswordInput(attrs={'placeholder': _("Password")})

0
投票

如果有人对实现 @Alasdair 代码有任何困惑,请参考下面的代码。`from django import forms 从 django.contrib.auth.forms 导入 UserCreationForm 从 django.utils.translation 导入 gettext_lazy as _ 从 .models 导入 CustomUser

类 CustomUserCreationForm(UserCreationForm): def init(self, *args, **kwargs): super().init(*args, **kwargs) self.fields['password1'].widget = forms.PasswordInput(attrs={'placeholder': _("密码")}) self.fields['password2'].widget = forms.PasswordInput(attrs={'placeholder': _("确认密码")})

class Meta(UserCreationForm):
    model = CustomUser
    fields = ('email', 'fullname', 'password1', 'password2', 'promo_code')
    widgets = {
        'email': forms.EmailInput(attrs={'placeholder': 'Email'}),
        'fullname': forms.TextInput(attrs={'placeholder': 'Full Name'}),
        'promo_code': forms.TextInput(attrs={'placeholder': 'Promo Code'}),
    }

`

© www.soinside.com 2019 - 2024. All rights reserved.