/ / Prepíše generický widget zobrazenia triedy založený na Django - django

Prepísať widget django pre zobrazenie generických tried založených na triede

Povedzme, že mám taký základný formulár CreateView, ktorý umožňuje novým používateľom registrovať sa na webe:

from django.contrib.auth import get_user_model
from django.http import HttpResponse
from django.views.generic import CreateView

User = get_user_model()


class Signup(CreateView):

model = User
fields = ["first_name", "last_name", "email", "password"]

Len som to skúsil a zistil som, že heslopole je vykreslené ako obyčajný text; ako by som prešiel prepísaním pohľadu tak, aby namiesto toho používal forms.PasswordInput ()? (Uvedomujem si, že je asi najjednoduchšie formu definovať ručne, ale som zvedavý, ako to urobíte.)

odpovede:

27 pre odpoveď č. 1

Mohli by ste prehrať get_form()a upravte formulár tak, aby sa zmenila miniaplikácia v poli hesla:

from django import forms

class Signup(CreateView):
model = User
fields = ["first_name", "last_name", "email", "password"]

def get_form(self, form_class):
form = super(Signup, self).get_form(form_class)
form.fields["password"].widget = forms.PasswordInput()
return form

Ešte lepším spôsobom by však bolo vytvorenie triedy vlastného formulára. Vo vlastnej triede stačí nastaviť widgets na Meta trieda. Ako toto:

from django import forms

class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ["first_name", "last_name", "email", "password"]
widgets = {
"password": forms.PasswordInput()
}

class Signup(CreateView):
form_class = SignupForm
model = User

Zvyčajne by ste vlastnú triedu formulára vložili aj do súboru forms.py.