Подтвердить что ты не робот

Как создать поле ввода пароля в django

Привет я использую класс модели 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

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

4b9b3361

Ответ 1

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

from django import forms

Ответ 2

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

class UserForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    class Meta:
        model = User

Ответ 3

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

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()

Ответ 4

@DrTyrsa верна. Не забудьте свои круглые скобки.

from django.forms import CharField, Form, PasswordInput

class UserForm(Form):
    password = CharField(widget=PasswordInput())

Ответ 5

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

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

Ответ 6

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

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


Учитывая, что вы используете пользователя модели, я предполагаю, что вы используете модель User() по умолчанию из 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, если мой ответ был недостаточно точным, пожалуйста, дайте нам знать, я буду рад отредактировать его позже.

Ответ 7

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

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

Ответ 8

То, что было написано ФП на password = forms.Charfield(widget=forms.PasswordInput), было правильным. Он просто не входит в раздел class Meta:. Вместо этого он должен быть выше, с отступом на один уровень ниже class UserForm....