2013-11-02 6 views
3

이 문제에 대한 언젠가 후에, 나는 당신의 도움이 필요합니다!장고 등록, 사용자 정의 등록 및 유효화

장고 등록 양식을 확장하려면 두 가지 다른 등록 양식이 필요합니다.

내 urls.py :

from django.conf.urls import patterns, url, include 
from views import RegistrationViewCandidate, RegistrationViewCompany 

urlpatterns = patterns('', 
     url(r'accounts/register/company$', RegistrationViewCompany.as_view(), name='registration_company'), 
     url(r'accounts/register/candidate$', RegistrationViewCandidate.as_view(), name='registration_candidate'), 
     url(r'accounts/', include('registration.backends.default.urls')), 
) 

내 views.py : 당신이 볼 때처럼

# -*- coding: utf-8 -*- 
from django.core.urlresolvers import reverse_lazy as _ 
from registration.forms import RegistrationForm 
from registration.views import RegistrationView 
from models import Candidate, Company 
from django import forms 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Submit, Layout, Field, Fieldset 
from crispy_forms.bootstrap import (PrependedText, PrependedAppendedText, FormActions) 


class CandidateForm(forms.ModelForm): 

    class Meta: 
     model = Candidate 
     fields = ('first_name', 'last_name', 'candidate_city', 'candidate_region', 'candidate_phone', 
        'candidate_birthday','candidate_website_url', 'candidate_github_url') 


class CompanyForm(forms.ModelForm): 

    class Meta: 
     model = Company 
     fields = ('comp_name', 'comp_address', 'comp_email', 'comp_region', 'comp_zip', 'comp_phone', 
        'comp_description', 'comp_city', 'comp_country', 'comp_website_url', 'comp_twitter_url', 
        'comp_fcbk_url') 


class CustomCandidateForm(RegistrationForm): 
    user_class_model = forms.CharField(initial="Candidate", label="user_class_model") 
    first_name = forms.CharField() 
    last_name = forms.CharField() 
    candidate_region = forms.CharField() 
    candidate_city = forms.CharField() 
    candidate_birthday = forms.DateField() 
    candidate_phone = forms.CharField() 
    candidate_website_url = forms.URLField(required=False) 
    candidate_github_url = forms.URLField(required=False) 

    def __init__(self, *args, **kwargs): 
     super(CustomCandidateForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.form_method = 'POST' 
     self.helper.form_class = 'form-horizontal' 
     self.helper.form_action = '' 
     self.helper.label_class = 'col-sm-2' 
     self.helper.field_class = 'col-sm-4' 
     self.helper.layout = Layout(
      Fieldset(
       'Account details', 
       Field('user_class_model'), 
       Field('username', css_class='input-sm'), 
       Field('email', css_class='input-sm'), 
       Field('password1'), 
       Field('password2'), 
      ), 
      Fieldset(
       'Personnal Informations ', 
       Field('first_name', css_class='input-sm'), 
       Field('last_name', css_class='input-sm'), 
       Field('candidate_region', label='Region'), 
       Field('candidate_city', label='City'), 
       Field('candidate_birthday'), 
       Field('candidate_phone'), 
       Field('candidate_website_url'), 
       Field('candidate_github_url'), 
      ), 

     ) 
     self.helper.add_input(Submit('submit', 'Submit', css_class='btn-primary')) 


class CustomCompanyForm(RegistrationForm): 
    user_class_model = forms.CharField(initial="Company", label="user_class_model") 


class RegistrationViewCompany(RegistrationView): 
    form_class = CustomCompanyForm 


class RegistrationViewCandidate(RegistrationView): 
    form_class = CustomCandidateForm 

CustomCandidateForm.base_fields.update(CandidateForm.base_fields) 
CustomCompanyForm.base_fields.update(CompanyForm.base_fields) 

, 나는 RegistrationView 및 RegistrationForm을 확장합니다. 내 문제는이 라인에 : form_action에 대해이 매개 변수와

self.helper.form_action = '' 

, 난 내 양식에 오류가있는 경우에, 나는 오류가있는 필드에 대한 인상 오류와 양식에 리디렉션하고 있습니다. 완벽한하지만, (내 양식이 깨끗한 경우) 내가 내 양식에 오류가없는 경우, 장고 등록이 오류가 제기 : 내가 넣으면

NotImplementedError at /user/accounts/register/candidate 

No exception supplied 

Request Method:  POST 
Request URL: http://127.0.0.1:8000/user/accounts/register/candidate 
Django Version:  1.5.4 
Exception Type:  NotImplementedError 
Exception Location:  /home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/registration/views.py in register, line 109 
Python Executable: /home/damien/Developpements/Django/virtualenv/bin/python2.7 
Python Version:  2.7.4 
Python Path:  

['/home/damien/Developpements/Django/virtualenv/site_web/linuxemploi', 
'/home/damien/Developpements/Django/virtualenv/site_web/linuxemploi', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7/plat-x86_64-linux-gnu', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7/lib-tk', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7/lib-old', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages'] 

Server time: sam, 2 Nov 2013 14:47:26 +0100 

Traceback: 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/registration/views.py" in dispatch 
    79.   return super(RegistrationView, self).dispatch(request, *args, **kwargs) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    86.   return handler(request, *args, **kwargs) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/registration/views.py" in post 
    35.    return self.form_valid(request, form) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/registration/views.py" in form_valid 
    82.   new_user = self.register(request, **form.cleaned_data) 
File "/home/damien/Developpements/Django/virtualenv/lib/python2.7/site-packages/registration/views.py" in register 
    109.   raise NotImplementedError 

Exception Type: NotImplementedError at /user/accounts/register/candidate 
Exception Value: 

을 :

self.helper.form_action = '.' 

을 내가하지 않은 오류 django 등록에 의해 인상하지만 양식에 오류가 있으면 양식이 깨끗하지 않습니다. /user/accounts/register/user/accounts/register * /후보자 * 또는 에 리디렉션됩니다./company.

아이디어가 있으십니까?

정말 감사합니다

답변

2

그것은 당신이 당신의 RegistrationViewCandidate 클래스 register(request, **form.cleaned_data) 메소드를 구현해야한다는 예외에서 간단합니다. 이 방법은 사용자 정의 등록 로직을 구현해야하며, 따라서 RegistrationView

은 아마, 당신은 기존의 구현을 수정하고 싶어 장고 등록에 구현되지 않은, django-registrationsimple 백엔드에서 말한다. 그렇다면 registration.views 대신 registration.backends.simple.views에서 RegistratioView을 서브 클래 싱해야합니다.

+0

그래, 고마워! 데프 get_form_class (자체 요청) : 데프 등록 반환 CustomCandidateForm (자기, 요청, ** cleaned_data) : Site._meta.installed 경우 : 사이트 = Site.objects 내 RegistrationViewCandidate (RegistrationView)에 클래스를 추가 .get_current() 다른 : 사이트 = RequestSite (요청)가 NEW_USER = RegistrationProfile.objects.create_inactive_user (cleaned_data [ '이름', cleaned_data [ '이메일', cleaned_data [ '가 password1'] 사이트)는 signals.user_registered .send (보낸 사람 = 자기 .__ 클래스 __, 사용자 = 새 사용자, 요청 = 요청) return new_user – user2947856