2014-01-08 6 views
1

사용자에게 서비스 약관에 동의하고 고유 한 전자 메일을 지원하게하고 싶습니다. django-registration에는 두 가지 서브 클래스 등록 양식이 있습니다 : RegistrationFormTermsOfServiceRegistrationFormUniqueEmail.장고 등록에서 등록 양식을 서브 클래 싱하는 방법

RegistrationForm을 자체적으로 하위 분류 한 다음 두 기능을 모두 제공해야합니까? 그렇다면 어떻게 완성 될 것입니까? 등록 양식은 내 app의 forms.py 또는 다른 곳에서 살고 있습니까?

답변

1

두 클래스에 대한 source에서 빠른 모습을 보여줍니다 :이 두 클래스는 너무 다른 의해 정의 된 메소드를 덮어 쓰지 볼 수 있듯이

class RegistrationFormTermsOfService(RegistrationForm): 
    """ 
    Subclass of ``RegistrationForm`` which adds a required checkbox 
    for agreeing to a site's Terms of Service. 

    """ 
    tos = forms.BooleanField(widget=forms.CheckboxInput, 
          label=_(u'I have read and agree to the Terms of Service'), 
          error_messages={'required': _("You must agree to the terms to register")}) 


class RegistrationFormUniqueEmail(RegistrationForm): 
    """ 
    Subclass of ``RegistrationForm`` which enforces uniqueness of 
    email addresses. 

    """ 
    def clean_email(self): 
     """ 
     Validate that the supplied email address is unique for the 
     site. 

     """ 
     if User.objects.filter(email__iexact=self.cleaned_data['email']): 
      raise forms.ValidationError(_("This email address is already in use. Please supply a different email address.")) 
     return self.cleaned_data['email'] 

것은 당신이 당신 자신의 클래스를 정의 할 수 있어야한다 있는 그대로 :

from registration.forms import RegistrationFormUniqueEmail, RegistrationFormTermsOfService 
class RegistrationFormTOSAndEmail(RegistrationFormUniqueEmail, RegistrationFormTermsOfService): 
    pass 

그리고이 기능을 테스트하지는 않았습니다. 이 클래스를 어디에 둘 것인지. forms.py은 좋은 위치입니다.

업데이트 :

우리가보기 URL 정의를 통해 몇 가지 매개 변수를 전달할 수 있다는 것을 우리에게 알려줍니다 https://django-registration.readthedocs.org/en/latest/views.html에서 약간의 독서; 예를 들어 양식 클래스. 장고 등록이 제공하는 템플릿 대신 기본 하나에

url(r'^register/$', 
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register') 
+0

이 어떻게 통과 할 것'RegistrationFormTOSAndEmail' : 간단히 같은 URL을 사용합니까? – user21398

+0

답변을 업데이트했습니다. 그러나 Google이나이 사이트를 통해 한 번만 검색하면 쉽게 답변을 찾을 수 있습니다. – EWit

+0

여기에는 두 가지가있을 수 있습니다 : url (r^계정/'대신 url (r ^/accounts/register/$')이어야하며이 항목 앞에 반드시이 행을 넣어야합니다. url r '^ accounts /', include ('registration.backends.default.urls')), – eezis

관련 문제