2013-02-04 4 views
1

긴 폼을 처리하기 위해 FormWizard를 통합하려고합니다. 조사한 후에는 세션을 통해 formwizard를 관리하기 때문에 django-merlin이 가장 좋은 옵션입니다. 그러나이를 통합하려고 시도하면 (django wizard docs에서 언급 한 것처럼) AttributeError: type object 'CreateWizard' has no attribute 'as_view'이됩니다. 여기 Django FormWizard as_view() 메서드 AttributeError

는 모습입니다 같은 :

from merlin.wizards.session import SessionWizard 

class StepOneForm(forms.Form): 
    year = forms.ChoiceField(choices=YEAR_CHOICES) 
    ... 

class StepTwoForm(forms.Form): 
    main_image = forms.ImageField() 
    ... 

class StepThreeForm(forms.Form): 
    condition = forms.ChoiceField(choices=CONDITION) 
    ... 

class CreateWizard(SessionWizard): 
    def done(self, form_list, **kwargs): 
     return HttpResponseRedirect(reverse('wizard-done')) 

URL : 멀린의 문서가 조금 스파 스이기 때문에, 내가 원래 장고 양식에 설명 된대로 as_view() 방법을 사용하기로 결정했습니다

url(r'^wizard/(?P<slug>[A-Za-z0-9_-]+)/$', CreateWizard.as_view([StepOneForm, StepTwoForm, StepThreeForm])), 

마법사 문서이지만, 결과는 AttributeError입니다. urlconf에 merlin wizard를 어떻게 통합해야합니까? 당신의 아이디어에 감사드립니다!

step_one = Step('step_one', StepOneForm()) 

오류 및 역 추적 :

TypeError at/issubclass() arg 1 must be a class 

Traceback: 
File /lib/python2.7/django/core/handlers/base.py" in get_response 
    89.      response = middleware_method(request) 
File "/lib/python2.7/django/utils/importlib.py" in import_module 
    35.  __import__(name) 
File "/myproject/myproject/urls.py" in <module> 
    7. from myapp.forms import step_one, step_two, step_three, CreateWizard 
File "/myproject/myapp/forms.py" in <module> 
    16. step_one = Step('step_one', StepOneForm()) 
File "/lib/python2.7/merlin/wizards/utils.py" in __init__ 
    36.   if not issubclass(form, (forms.Form, forms.ModelForm,)): 

Exception Type: TypeError at/
Exception Value: issubclass() arg 1 must be a class 

메신저 아직도 비록


이것은 내가 같이 @ mVChr의 대답을 기반으로 정의하는 단계를 업데이트 한 후 얻을 오류 및 역 추적입니다 오류가 발생하면 @mVChr 덕분에 솔루션에 더 가까이 다가 갈 수 있습니다. 이 오류를 해결하는 방법에 대한 아이디어는 대단히 감사하겠습니다! 어떤 아이디어 주셔서 감사합니다!

+0

그냥'CreateWizard ([StepOneForm, StepTwoForm, StepThreeForm])'시도 했습니까? ([문서보기] (http://packages.python.org/django-merlin/sessionwizard.html#how-to-use-sessionwizard))? 또한 django'Form' 객체가 아니라 ['Step' objects] (http://packages.python.org/django-merlin/api/step.html#api-step)를 전달해야합니다. – mVChr

+0

그러면 다른 오류가 발생합니다. 'TypeError at/모든 단계는 Step의 인스턴스 여야합니다.' merlin 소스 42 줄에있는 [here here] (https://github.com/supercodepoet/django-merlin/blob/master/src/merlin/wizards/session.py)입니다. 어떤 아이디어라도 제공해 주셔서 감사합니다! –

+0

@mVChr : 당신의 아이디어에 감사드립니다. 양식 대신 단계 개체를 전달하는 방법을 설명하기 위해 작은 예제를 제공 할 수 있습니까?그러면이 문제를 해결하는 방법을 이해하는 데 도움이 될 것입니다. –

답변

0

참고 :이 방법이 효과가 있는지 나는 모르겠다. Nick B가 특정 예제를 사용하여 문서를 번역하여 적절한 해결책을 얻도록 돕고 자 노력 중이다. 이 기능이있는 그대로 알려 주시면이 설명을 삭제하겠습니다. 당신의 urls.py에 다음

from merlin.wizards.session import SessionWizard 
from merlin.wizards.utils import Step 

class StepOneForm(forms.Form): 
    year = forms.ChoiceField(choices=YEAR_CHOICES) 
    ... 
step_one = Step('step-one', StepOneForm()) 

class StepTwoForm(forms.Form): 
    main_image = forms.ImageField() 
    ... 
step_two = Step('step-two', StepTwoForm()) 

class StepThreeForm(forms.Form): 
    condition = forms.ChoiceField(choices=CONDITION) 
    ... 
step_three = Step('step-three', StepThreeForm()) 

class CreateWizard(SessionWizard): 
    def done(self, form_list, **kwargs): 
     return HttpResponseRedirect(reverse('wizard-done')) 

을 그리고 :

url(r'^wizard/(?P<slug>[A-Za-z0-9_-]+)/$', 
    CreateWizard([step_one, step_two, step_three])) 
+0

@mVChr에게 감사드립니다. 귀하의 충고에 따라 나는 더 가까이 생각하지만 지금은 새로운 오류 메시지가 있습니다 : TypeError at/issubclass() arg 1이 클래스 여야합니다. 또한 폼은 장고 폼의 서브 클래스 여야합니다. 디버그 화면의 로컬 변수를 보면 다음과 같은 사실도 알 수 있습니다.'self : 형식화 오류 : '단계'객체에 'slug'속성이 없습니다. 이 오류를 해결하는 방법을 잘 모르겠지만 지혜의 맛있는 음식에 크게 감사 할 것입니다. 감사! –

0

원하는 다음과 같이 당신이 당신의 SessionWizard 서브 클래스의 인스턴스에 직접 Step 개체 목록을 전달해야 할 것 같습니다 the docs을 읽는에서

단계 객체를 만드는 동안 잘못된 구문을 사용한다는주의를 끌기 위해 당신은 모든 단계의 객체를 해결하는 데

step_one = Step('step-one', StepOneForm) 

처럼이

step_one = Step('step-one', StepOneForm()) 

가 있어야한다.

관련 문제