2014-09-01 84 views
5

我已使用簡單設置變量ACCOUNT_SIGNUP_FORM_CLASS覆蓋註冊表單,但覆蓋登錄表單,您需要使用ACCOUNT_FORMS = {'login': 'yourapp.forms.LoginForm'}。我有我想要的形式,並將其與脆皮形式和Bootstrap3完美顯示:使用ACCOUNT_FORMS覆蓋Django allauth登錄表單

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

爲allauth的文檔是在這裏表示設定:http://django-allauth.readthedocs.org/en/latest/configuration.html – wnajar 2014-09-01 05:13:48

回答

7

根據我的理解,您可以使用ACCOUNT_FORMS來覆蓋默認的LoginForm,但您需要提供一個包含原始類中提供的所有方法的類。你的班級缺少login方法。

我會在您的settings.py文件中設置ACCOUNT_FORMS = {'login': 'yourapp.forms.YourLoginForm'},其中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 
+0

實際上,這就是我所做的,但它是一個噩夢/路徑不值得下降,因爲你必須複製整個,複雜的'LoginForm'類。它不是非常可擴展的,並且沒有記錄。最後,我放棄了Django,並使用Laravel完成了應用程序......我做出了最好的決定。 – wnajar 2014-09-16 09:15:44

+0

提供給任何人閱讀此解決方案,這個解決方案適用於我而不必複製其他任何東西。完美工作。 – awwester 2014-12-30 14:59:24

+0

我不斷收到循環進口 – guival 2016-11-11 13:04:42