2012-05-07 8 views
0

私はチュートリアルをオンラインで行っていましたが、フォームウィザードでステップを条件付きで表示しようとすると、フォームウィザードを使用して異なる完了パスを作成する - Django

views.py

def silver_ad_selected(wizard): 
     cleaned_data = wizard.get_cleaned_data_for_step('0') or {} 
     return cleaned_data.get('ad_type') == '2' 

def platinum_ad_selected(wizard): 
     cleaned_data = wizard.get_cleaned_data_for_step('0') or {} 
     return cleaned_data.get('ad_type') == '3' 

class AddWizard(SessionWizardView): 
     def done(self, form_list, **kwargs): 
       return render_to_response('business/done.html', { 
         'form_data': [form.cleaned_data for form in form_list], 
       }) 

urls.py:

add_forms = [AddForm1, AddForm2, AddForm3] 

urlpatterns = patterns('listings.views', 
    url(r'^addWizard/$', AddWizard.as_view(add_forms, 
     condition_dict = { 
       '2': silver_ad_selected or premium_ad_selected 
     })), 
....... 

forms.py

class AddForm1(forms.Form): 
     TYPE_CHOICES = (
       ('1','Basic'), 
       ('2','Silver'), 
       ('3','Platinum') 
     ) 
     ad_type = forms.ChoiceField(choices=TYPE_CHOICES, widget=forms.RadioSelect) 

class AddForm2(forms.Form): 
     category = forms.ModelChoiceField(queryset = Category.objects.all()) 
     city = forms.ModelChoiceField(queryset = City.objects.all()) 
     name = forms.CharField(max_length = 200) 
     address = forms.CharField(max_length = 200) 
     slogan = forms.CharField(max_length=140) 
     phone = forms.CharField(max_length=10) 
     website = forms.URLField() 
     email = forms.EmailField() 

class AddForm3(AddForm2): 
     twitter = forms.CharField(max_length=100) 
     facebook = forms.URLField() 
     description = forms.CharField(widget=forms.Textarea) 

基本的に、私は、ユーザーがいずれかを選択した場合は、最後のステップを表示したいですステップ1で選択した「シルバー」オプションまたは「プラチナ」オプション。現在、私が選択したものであれば、最初の2つのステップ/フォームsが表示されます。

私のsilver_ad_selectedplatinum_ad_selectedの方法が問題だとは思いますが、わかりません。

おかげ

答えて

1

はあなたのurls.pyを変更してみてください:

add_forms = [AddForm1, AddForm2, AddForm3] 

urlpatterns = patterns('listings.views', 
    url(r'^addWizard/$', AddWizard.as_view(add_forms, 
     condition_dict = { 
      '2': lambda wizard: wizard.silver_ad_selected() or wizard.premium_ad_selected() 
     })), 
+0

はい。問題は、呼び出し可能な関数の代わりにブール値の条件を渡していることでした。これはあなたのラムダとまったく同じです。どうもありがとう – AlexBrand

関連する問題