2014-05-10 14 views
5

Desidero modificare gli attributi di un campo modulo. In particolare, il modulo di login:Sovrascrivi campo modulo django-allauth

(django-allauth LoginForm)

classe LoginForm (FORMATI.FORM):

password = PasswordField(label=_("Password")) 
remember = forms.BooleanField(label=_("Remember Me"), 
           required=False) 

user = None 

def __init__(self, *args, **kwargs): 
    super(LoginForm, self).__init__(*args, **kwargs) 
    if app_settings.AUTHENTICATION_METHOD == AuthenticationMethod.EMAIL: 
     login_widget = forms.TextInput(attrs={'type': 'email', 
               'placeholder': 
               _('E-mail address'), 
               'autofocus': 'autofocus'}) 
     login_field = forms.EmailField(label=_("E-mail"), 
             widget=login_widget) 
    elif app_settings.AUTHENTICATION_METHOD \ 
      == AuthenticationMethod.USERNAME: 
     login_widget = forms.TextInput(attrs={'placeholder': 
               _('Username'), 
               'autofocus': 'autofocus'}) 
     login_field = forms.CharField(label=_("Username"), 
             widget=login_widget, 
             max_length=30) 
    else: 
     assert app_settings.AUTHENTICATION_METHOD \ 
      == AuthenticationMethod.USERNAME_EMAIL 
     login_widget = forms.TextInput(attrs={'placeholder': 
               _('Username or e-mail'), 
               'autofocus': 'autofocus'}) 
     login_field = forms.CharField(label=pgettext("field label", 
                "Login"), 
             widget=login_widget) 
    self.fields["login"] = login_field 
    set_form_field_order(self, ["login", "password", "remember"]) 

Come sovrascrivere (o override) un django-allauth campo di modulo? Aiuto!

+0

cosa intendi per modifica? Vuoi aggiungere nuovi campi o modificare quelli esistenti come il campo 'password'? –

risposta

0

So che è possibile ignorare la classe del modulo di registrazione con la variabile di impostazioni ACCOUNT_SIGNUP_FORM_CLASS ... ma per quanto ne so non c'è modo di modificare il modulo di accesso. Ho posto la mia domanda simile qui.

7

È possibile sovrascrivere il LoginForm predefinito utilizzando ACCOUNT_FORMS nella tua settings.py, ad esempio:

ACCOUNT_FORMS = {'login': 'yourapp.forms.YourLoginForm'} 

e scrivere un YourLoginForm conseguenza.

# yourapp/forms.py 

from allauth.account.forms import LoginForm 

class YourLoginForm(LoginForm): 
    def __init__(self, *args, **kwargs): 
     super(YourLoginForm, self).__init__(*args, **kwargs) 
     self.fields['login'].widget = forms.TextInput(attrs={'type': 'email', 'class': 'yourclass'}) 
     self.fields['password'].widget = forms.PasswordInput(attrs={'class': 'yourclass'}) 
+0

Funziona per il modulo di accesso, ripristina il modulo, ma non funziona per modificare il modulo della password (es. ACCOUNT_FORMS = {'reset_password': 'XYZ'} –