我已使用简单设置变量ACCOUNT_SIGNUP_FORM_CLASS
覆盖了注册表单,但要覆盖您需要使用ACCOUNT_FORMS = {'login': 'yourapp.forms.LoginForm'}
的登录表单。我有我想要的形式,它与crispy-forms和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')
),
)
当我提交表单时,我得到AttributeError at /account/login/ - 'LoginForm' object has no attribute 'login'
。这里出了什么问题?原始allauth登录表单的来源是:https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py
答案 0 :(得分:7)
根据我的理解,您可以使用ACCOUNT_FORMS
覆盖默认的LoginForm,但是您需要提供一个包含原始类中提供的所有方法的类。您的班级缺少login
方法。
我会在ACCOUNT_FORMS = {'login': 'yourapp.forms.YourLoginForm'}
文件中设置settings.py
,YourLoginForm
继承原始类。
# 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