Создание различных путей завершения с помощью мастера форм — Django

Я следил за учебным пособием в Интернете, но я застрял, пытаясь условно показать шаги в моем мастере форм.

просмотры.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],
                })

URL.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
        })),
.......

формы.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. Прямо сейчас, независимо от того, что я выбираю, только первые два шага/формы показаны.

Я думаю, что проблема может заключаться в моих методах silver_ad_selected и platinum_ad_selected, но я не уверен.

Спасибо


person AlexBrand    schedule 07.05.2012    source источник


Ответы (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()
        })),
person Greg    schedule 07.05.2012
comment
да. Проблема заключалась в том, что я передал логическое условие вместо вызываемой функции, что и является вашей лямбдой. Большое спасибо - person AlexBrand; 08.05.2012