Как создать поле ввода пароля в django - PullRequest
53 голосов
/ 17 февраля 2012

Привет! Я использую класс модели django с некоторым полем и полем пароля. Вместо отображения обычного простого текста я хочу отобразить ввод пароля. Я создал модель класса, как это:

class UserForm(ModelForm):
    class Meta:
        password = forms.CharField(widget=forms.PasswordInput)
        model = User
        widgets = {
            'password': forms.PasswordInput(),
        }

Но я получаю следующую ошибку: NameError: имя 'forms' не определено.

Я использую версию django 1.4.0. Я перешел по этой ссылке: Проблемы с паролем в Django

Все еще получаю ту же ошибку. Что я должен делать. Где я ошибаюсь. Пожалуйста, помогите

Ответы [ 7 ]

59 голосов
/ 17 февраля 2012

Виджет должен быть вызовом функции, а не свойством. Вы пропустили скобки.

class UserForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    class Meta:
        model = User
55 голосов
/ 17 февраля 2012

Вам необходимо включить следующее в ваш импорт;

from django import forms
16 голосов
/ 14 сентября 2013

Почему бы просто не создать свое собственное поле пароля, которое вы можете использовать во всех своих моделях.

from django import forms 

class PasswordField(forms.CharField):
    widget = forms.PasswordInput

class PasswordModelField(models.CharField):

    def formfield(self, **kwargs):
        defaults = {'form_class': PasswordField}
        defaults.update(kwargs)
        return super(PasswordModelField, self).formfield(**defaults)

Так что теперь в вашей модели вы используете

password = PasswordModelField()
14 голосов
/ 17 февраля 2012

@ DrTyrsa правильно.Не забывайте свои скобки.

from django.forms import CharField, Form, PasswordInput

class UserForm(Form):
    password = CharField(widget=PasswordInput())
3 голосов
/ 12 марта 2018

Я сделал как следует без дополнительного импорта

from django import forms
class Loginform(forms.Form):
    attrs = {
        "type": "password"
    }
    password = forms.CharField(widget=forms.TextInput(attrs=attrs))

Идея приходит из исходного кода: https://docs.djangoproject.com/en/2.0/_modules/django/forms/fields/#CharField

2 голосов
/ 21 июля 2018

Поскольку этот вопрос был задан пару лет назад, и он хорошо проиндексирован в результатах поиска, этот ответ может помочь некоторым людям, приезжающим сюда с такой же проблемой, но использующим более свежую версию Django.

IЯ использую Django 1.11 , но это также должно работать и для Django 2.0.


Учитывая, что вы используете пользователя модели, я предполагаю, что вы используете пользователя по умолчанию () модель из Django.

Поскольку модель User () уже имеет поле пароля, мы можем просто добавить к ней виджет.

from django import forms
from django.contrib.auth.models import User

# also, it will work with a custom user model if needed.
# from .models import User


class UserRegistrationForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['username', 'password']

        widgets = {
            # telling Django your password field in the mode is a password input on the template
            'password': forms.PasswordInput() 
        }

Проверьте документы

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

0 голосов
/ 13 июля 2015

Это очень просто.

Вы должны получить password поле формы из Meta класса.

...