python - Django 表单向导调度程序

标签 python django forms django-forms django-formwizard

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

我正在使用 Django 表单向导,但我不知道如何构建我的 View 以合并此类逻辑。

有人可以帮我开始吗? 最好显示一些需要在 django 形式的 SessionWizardView 中执行的代码。

提前致谢。

最佳答案

如果您仅依赖于先前表单中的数据,则无需重写 get_form,您可以使用 condition_dict,在初始化 WizardView 时通过自定义 ID 映射表单。

我不喜欢在 urls.py 中为定义 WizardView 做太多事情,所以我将 WizardView 包装在标准 View 函数中,并将普通 View 函数放在 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 表单向导调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622263/

相关文章:

python - 线条颜色取决于趋势

python - 为什么 numpy.matrix 的 numpy.copy 的行为与原始矩阵不同?与该副本转置的乘法不起作用

Mac 下无法使用 pyenv 安装 Python

django - 如何在渲染 StackedInline 字段时覆盖 str 方法?

php - 无法使用 PHP $_POST[] 变量检索 jQuery 序列化表单数据

Python内存泄漏

django - Docker 端口转发

Django - 如何复制使用带有直通模型的 m2m 字段的模型实例

c# - 使用查询字符串设置下拉列表中的选择

java - 如何使用 BeanUtils.populate 从具有复选框的表单填充 bean