こんにちは、Djangoモデルクラスとフィールドとパスワードフィールドを使用しています。通常のプレーンテキストを表示する代わりに、パスワード入力を表示します。次のようなモデルクラスを作成しました。
class UserForm(ModelForm):
class Meta:
password = forms.CharField(widget=forms.PasswordInput)
model = User
widgets = {
'password': forms.PasswordInput(),
}
しかし、次のエラーが表示されます:NameError:name 'forms'は定義されていません。
私はDjangoバージョン1.4.0を使用しています。このリンクをたどりました: Djangoパスワードの問題
それでも同じエラーが発生します。私は何をすべきか。どこで問題が発生していますか?
インポートには次を含める必要があります。
from Django import forms
ウィジェットはプロパティではなく関数呼び出しである必要があります。括弧がありません。
class UserForm(ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
すべてのモデルで使用できる独自のパスワードフィールドを作成しないでください。
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()
@DrTyrsaは正しいです。括弧を忘れないでください。
from Django.forms import CharField, Form, PasswordInput
class UserForm(Form):
password = CharField(widget=PasswordInput())
追加のインポートなしでフォローしました
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
この質問は数年前に尋ねられたものであり、検索結果で十分に索引付けされているため、この回答は同じ問題でここに来る一部の人々を助けるかもしれませんが、より新しいDjangoバージョン。
私はDjango 1.11を使用していますが、Django 2.0でも動作します。
モデルユーザーを使用していることを考慮して、DjangoのデフォルトのUser()モデルを使用していると仮定します。
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を初めて使用します。答えが十分に正確でない場合は、お知らせください。後で編集します。
password = forms.Charfield(widget=forms.PasswordInput)
のOPによって書かれたものは正しかった。 class Meta:
セクションに属していません。代わりに、class UserForm
....の1レベル下にインデントして、その上にある必要があります.
とても簡単です。
password
クラスからMeta
フォームフィールドを取得する必要があります。