2017-11-13 5 views
0

Ich verwende Django-Registrierung 2.3 für ein Projekt und versuchen, den Standard Registration mit folgenden außer Kraft zu setzen:Django-Registrierung Überschreibung Registrierungsformular

class MyRegistrationForm(RegistrationForm): 
    captcha = NoReCaptchaField() 

    class Meta: 
     model = User 
     fields = ['first_name', 'last_name', 'username', 'email', 'password1', 'password2'] 
     widgets = { 
      'first_name' : forms.TextInput(attrs={'class' : 'form-control'}), 
      'last_name' : forms.TextInput(attrs={'class' : 'form-control'}), 
      'username' : forms.HiddenInput(), 
      'email' : forms.EmailInput(attrs={'class' : 'form-control'}), 
      'password1' : forms.PasswordInput(attrs={'class' : 'form-control'}), 
      'password2' : forms.PasswordInput(attrs={'class' : 'form-control'}), 
     } 

Ich bin aus meiner urls.py dann ruft mit url(r'^accounts/register/$', RegistrationView.as_view(form_class=MyRegistrationForm), name='registration_register'),

In der Vorlage der captcha, first_name und last_name Felder sind mit form Steuerelement gerendert wird die username versteckt, aber die anderen Felder werden ohne die Klasse gemacht. Was muss ich tun?

+0

Sie können nicht verwenden 'widgets' Felder außer Kraft zu setzen, die explizit durch die Form deklariert sind. Siehe die [Anmerkung] (https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#overriding-the-default-fields) in den Dokumenten. In Ihrem Fall wird 'email' durch' RegistrationForm' deklariert, und 'password1' und' password2' werden von 'UserCreationForm' deklariert (welche' RegistrationForm' Unterklassen). Daher können diese drei Felder nicht durch Widgets überschrieben werden. – Alasdair

Antwort

0

Ich hatte das gleiche Problem einmal und ich verwendet, um dieses


class MyRegistrationForm(RegistrationForm): 
    captcha = NoReCaptchaField() 
    first_name = forms.CharField(max_length=30, required=False, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    last_name = forms.CharField(max_length=30, required=False, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    email = forms.EmailField(max_length=254, widget=forms.TextInput(attrs={'class': 'form-control'})) 
    password1 = forms.CharField(max_length=30, required=True, widget=forms.TextInput(attrs={'class': 'form-control', 
                          'name': "password1", 
                          'type': "password"})) 
    password2 = forms.CharField(max_length=30, required=True, widget=forms.TextInput(attrs={'class': 'form-control', 
                          'name': "password2", 
                          'type': "password"})) 
    class Meta: 
     model = User 
     fields = ['username', 'first_name', 'last_name', 'email'] 
     widgets = { 
      'username' : forms.TextInput(attrs = {'class': 'form-control'}), 
     } 
+0

Das funktioniert, aber ich bin mir nicht sicher, warum meine nicht – HenryM

+0

einige Felder nicht geändert werden können, haben sie eine defualt attr –