Добавить класс в Django поле PasswordInput в forms.py? (Можно добавить поля класса toTextInput без проблем) - PullRequest
0 голосов
/ 08 февраля 2020

Я создаю форму регистрации пользователя и пытаюсь добавить класс bootstrap .form-control к каждому входу. Класс добавляется в поля TextInput правильно, но не в поля PasswordInput:

from django import forms
from django.forms import TextInput, PasswordInput

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',)
        widgets = {'username': TextInput(attrs={'class':'form-control'}),
                   'first_name': TextInput(attrs={'class':'form-control'}),
                   'last_name': TextInput(attrs={'class':'form-control'}),
                   'email': TextInput(attrs={'class':'form-control'}),
                   'password1': PasswordInput(attrs={'class':'form-control'}),
                   'password2': PasswordInput(attrs={'class':'form-control'})
        }

Когда я проверяю поля пароля, они не имеют класса .form-control. Можно ли применить этот класс (или любой другой класс) для ввода пароля?

1 Ответ

1 голос
/ 08 февраля 2020

Я не вижу проблемы в вашем коде, но сейчас не могу ее протестировать.
Вы можете попробовать добавить виджет следующим образом, чтобы увидеть, работает ли он:

class SignUpForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',)
        widgets = {'username': TextInput(attrs={'class':'form-control'}),
                   'first_name': TextInput(attrs={'class':'form-control'}),
                   'last_name': TextInput(attrs={'class':'form-control'}),
                   'email': TextInput(attrs={'class':'form-control'})
        }

def __init__(self, *args, **kwargs):
        super(SignUpForm, self).__init__(*args, **kwargs)
        self.fields['password1'].widget = PasswordInput(attrs={'class': 'form-control'})
        self.fields['password2'].widget = PasswordInput(attrs={'class': 'form-control'})

Другой вариант будет использовать django -widget-tweaks: https://github.com/jazzband/django-widget-tweaks

При этом вы можете добавлять классы в свой шаблон. Но вы также можете добавить другие атрибуты.
Например:

{% load widget_tweaks %}

{{ form.password1|add_class:"form-control" }}
{{ form.password2|add_class:"form-control" }}
...