问题
I already overrode the signup form with the simple settings variable ACCOUNT_SIGNUP_FORM_CLASS but to override the login form you need to use ACCOUNT_FORMS = {'login': 'yourapp.forms.LoginForm'}. I have the form I want and it displays perfectly with crispy-forms and Bootstrap3:
class LoginForm(forms.Form):
login = forms.EmailField(required = True)
password = forms.CharField(widget = forms.PasswordInput, required = True)
helper = FormHelper()
helper.form_show_labels = False
helper.layout = Layout(
Field('login', placeholder = 'Email address'),
Field('password', placeholder = 'Password'),
FormActions(
Submit('submit', 'Log me in to Cornell Forum', css_class = 'btn-primary')
),
)
When I submit the form I get AttributeError at /account/login/ - 'LoginForm' object has no attribute 'login'. What's going wrong here? The source for the original allauth login form is here: https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py
回答1:
From my understanding, you can overwrite the default LoginForm using ACCOUNT_FORMS, but you need to provide a class that contains all the methods provided in the original class. Your class is missing the login method.
I would set ACCOUNT_FORMS = {'login': 'yourapp.forms.YourLoginForm'} in your settings.py file, where YourLoginForm inherits from the original class.
# 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['password'].widget = forms.PasswordInput()
# You don't want the `remember` field?
if 'remember' in self.fields.keys():
del self.fields['remember']
helper = FormHelper()
helper.form_show_labels = False
helper.layout = Layout(
Field('login', placeholder = 'Email address'),
Field('password', placeholder = 'Password'),
FormActions(
Submit('submit', 'Log me in to Cornell Forum', css_class = 'btn-primary')
),
)
self.helper = helper
来源:https://stackoverflow.com/questions/25599186/overriding-django-allauth-login-form-with-account-forms