2014-05-10 29 views
5

Chcę zmodyfikować atrybuty pola formularza. Konkretnie, formularz logowania:Zastąp pole formularza django-allauth

(django-allauth LoginForm)

klasa LoginForm (forms.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"]) 

Jak zastąpić (lub nadpisanie) Django-allauth pole formularza? Wsparcie!

+0

co masz na myśli, modyfikując? Czy chcesz dodać nowe pola lub zmodyfikować istniejące, takie jak "hasło"? –

Odpowiedz

0

Wiem, że można zastąpić formularz formularza rejestracji ze zmienną ustawień ACCOUNT_SIGNUP_FORM_CLASS ... ale z tego co wiem, nie ma możliwości zmiany formularza logowania. Zadałem tutaj moje własne podobne pytanie.

7

Można nadpisać domyślny LoginForm korzystając ACCOUNT_FORMS w settings.py, na przykład:

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

i napisać YourLoginForm odpowiednio.

# 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

Działa dla formularza logowania, resetuje formularz, ale nie działa dla formularza zmiany hasła (np. ACCOUNT_FORMS = {'reset_password': 'XYZ'} –