【问题标题】:Creating different completion paths using form wizard - Django使用表单向导创建不同的完成路径 - Django
【发布时间】:2012-05-16 09:24:26
【问题描述】:

我一直在在线学习教程,但在我的表单向导中尝试有条件地显示步骤时卡住了。

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 中选择的“Silver”选项或“Platinum”选项,我只想显示最后一步。现在,无论我选择什么,只有前两个显示步骤/表格。

我认为我的silver_ad_selectedplatinum_ad_selected 方法可能是问题所在,但我不确定。

谢谢

【问题讨论】:

    标签: django django-forms django-formwizard


    【解决方案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()
            })),
    

    【讨论】:

    • 是的。问题是我传递的是布尔条件而不是可调用函数,这正是你的 lambda 表达式。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2012-05-16
    • 2021-03-10
    • 1970-01-01
    • 2013-09-17
    • 2021-03-23
    • 2013-12-10
    相关资源
    最近更新 更多