2014-09-01 4 views
5

간단한 설정 변수 ACCOUNT_SIGNUP_FORM_CLASS으로 가입 양식을 덮어 쓰지 만 로그인 양식을 덮어 쓰려면 ACCOUNT_FORMS = {'login': 'yourapp.forms.LoginForm'}을 사용해야합니다. 내가 원하는 형태를 가지고 있으며 바삭-양식과 Bootstrap3 완벽하게 표시 : 나는 양식을 제출하면ACCOUNT_FORMS로 장고 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

워드 프로세서는 여기에 설정을 보여주고있다 : http://django-allauth.readthedocs.org/en/latest/configuration.html – wnajar

답변

7

제 생각에 기본 로그인 폼은 ACCOUNT_FORMS을 사용하여 덮어 쓸 수 있지만 원래 클래스에서 제공된 모든 메소드가 포함 된 클래스를 제공해야합니다. 수업에 login 메소드가 없습니다.

settings.py 파일에 ACCOUNT_FORMS = {'login': 'yourapp.forms.YourLoginForm'}을 입력하면 YourLoginForm은 원래 클래스에서 상속됩니다. allauth에 대한

# 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

+0

참고로이 책을 읽는 누군가에게이 솔루션은 다른 것을 복사하지 않고도 잘 작동했습니다. 완벽하게 일했습니다. – awwester

+0

계속이 작업을 수행하는 순환 수입이 계속 발생합니다. – guival

관련 문제