ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Django表单向导调度程序

2019-06-29 00:44:38  阅读:215  来源: 互联网

标签:python django forms django-forms django-formwizard


我有一个两页长的表格.虽然,第一页提出了一个基本问题,并根据答案需要重定向到三个表格之一,然后提交.我创建了一个图表来帮助说明:

我正在使用django表单向导,但我不知道如何构建我的视图以便合并这种类型的逻辑.

有人可以帮我开始这个吗?最好显示一些需要在django-form SessionWizardView中执行的代码.

提前致谢.

解决方法:

如果您完全依赖于前一个表单中的数据,则不需要覆盖get_form,您可以使用condition_dict,在初始化WizardView时通过自定义ID映射表单.

我不喜欢在我的urls.py中定义WizardView,因此我将WizardView包装在标准视图函数中,并将普通视图函数放在urls.py中.

    def buy_cart_wizard_view_wrapper(request):

        con_dict = {FORM_ID_BILLING_ADDRESS_PICK: db_funcs.check_wizard_has_addresses_buy_cart,
                    FORM_ID_BILLING_ADDRESS: db_funcs.check_wizard_create_billing_pick_buy_cart,
                    FORM_ID_SHIPPING_ADDRESS_PICK: db_funcs.check_wizard_has_addresses_shipping_pick_buy_cart,
                    FORM_ID_SHIPPING_ADDRESS: db_funcs.check_wizard_create_shipping_pick_buy_cart,
                    FORM_ID_SAVED_BUSINESS_PAYMENT_PICK: db_funcs.check_wizard_has_payments_buy_cart,
                    FORM_ID_SAVED_BUSINESS_PAYMENT: db_funcs.check_wizard_create_payment_pick_buy_cart,
        }

        form_list = [(FORM_ID_BILLING_ADDRESS_PICK, accounts_forms.AddressPickerForm),
                 (FORM_ID_BILLING_ADDRESS, accounts_forms.BillingAddressForm),
                 (FORM_ID_SHIPPING_ADDRESS_PICK, accounts_forms.AddressPickerForm),
                 (FORM_ID_SHIPPING_ADDRESS, accounts_forms.AddressForm),
                 (FORM_ID_SAVED_BUSINESS_PAYMENT_PICK, accounts_forms.SavedBusinessPmtPickerForm),
                 (FORM_ID_SAVED_BUSINESS_PAYMENT, accounts_forms.SavedBusinessPmtBuyCartForm),
                 ]

        return BuyCartWizardView.as_view(form_list,condition_dict=con_dict, initial_dict=ini_dict)(request)

然后是前一个表格的条件检查示例,’

def check_wizard_create_payment_pick_buy_cart(wizard):
    """
    Check if the previous form has an address selected
    """
    cleaned_data = wizard.get_cleaned_data_for_step(FORM_ID_SAVED_BUSINESS_PAYMENT_PICK) or {}
    create_new_payment_ind = cleaned_data.get(FORM_FIELD_NAME) or ''
    if create_new_payment_ind != '':
        return True
    else:
        return False

返回True以将表单显示为下一步,返回False以跳过表单并在此之后移动到表单或完成(如果超出表单).

标签:python,django,forms,django-forms,django-formwizard
来源: https://codeday.me/bug/20190629/1321156.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有