如何添加占位符UserCreationForm django?

时间:2018-11-10 22:11:17

标签: django

我正在尝试在UserCreationForm的用户名字段中添加一个占位符 但我不明白该怎么做。 我已经以/lib/site-packages/django/contrib/auth/forms.py的方式更改了forms.py文件。

我在password1和password2字段中添加了一个占位符,其工作方式如下:

class UserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and
password.
"""
error_messages = {
    'password_mismatch': _("The two password fields didn't match."),
}
password1 = forms.CharField(
    label=_("Password"),
    strip=False,
    widget=forms.PasswordInput(attrs={'placeholder':'Password'}),
    help_text=password_validation.password_validators_help_text_html(),
)
password2 = forms.CharField(
    label=_("Password confirmation"),
    widget=forms.PasswordInput(attrs={'placeholder':'Confirmar Password'}),
    strip=False,
    help_text=_("Enter the same password as before, for verification."),
)

我可以看到用户名字段来自类meta:

class Meta:
    model = User
    fields = ("username",)
    field_classes = {'username': UsernameField}

来自这个班,但是我不确定

class UsernameField(forms.CharField):
def to_python(self, value):
    return unicodedata.normalize('NFKC', super().to_python(value))

我不明白如何在用户名字段中添加占位符

这是我的html

<form method="post" action=".">
                {% csrf_token %}
                    {% for field in form %}
                        {{ field }}<br />
                        {% for error in field.errors %}
                        <p style="color: red">{{ error }}</p>
                        {% endfor %} 
                    {% endfor %}
                <input id="submit-signup-btn" type="submit" value="Iniciar"/>    
            </form>

4 个答案:

答案 0 :(得分:1)

基于@Gabriel costa的答案,我想出了以下解决方案:

class AccountCreationForm(UserCreationForm):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['username'].widget.attrs.update({'placeholder':_('Username')})
    self.fields['email'].widget.attrs.update({'placeholder':_('Email')})
    self.fields['password1'].widget.attrs.update({'placeholder':_('Password')})        
    self.fields['password2'].widget.attrs.update({'placeholder':_('Repeat password')})

其他解决方案在这种情况下不起作用。

答案 1 :(得分:0)

您还可以在表单的Meta类中定义小部件。

class Meta:
    model = User
    fields = ("username",)
    field_classes = {'username': UsernameField}
    widgets = {
        'username': form.fields.TextInput(attrs={'placeholder': 'Your text for placeholder'})
    }

答案 2 :(得分:0)

一段时间后,我找到了一种方法,这就是我的方法:

在/lib/site-packages/django/contrib/auth/forms.py文件中的UserCreationForm类中,在Meta类下,有一个 init 函数,您可以在其中看到此行

self.fields[self._meta.model.USERNAME_FIELD].widget.attrs.update({'autofocus': 
True})

我在如下所示的update方法的行末添加了占位符:

self.fields[self._meta.model.USERNAME_FIELD].widget.attrs.update({'autofocus': True,
                                                                          'placeholder':'Nome Perfil'})

答案 3 :(得分:0)

我以前有过类似的问题,这就是我解决的方法:

class Meta:
   ......
   widgets = {
    'username': forms.fields.TextInput(attrs={'placeholder': 'random stuff'})
}

或内部,例如

city = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'text'}))