我可以为django SessionWizard使用两次相同的表格吗?

时间:2016-01-23 16:46:35

标签: python django forms django-formwizard

我正在尝试为旅行创建过程创建SessionWizardView。这次旅行可能有一条腿(单程)或两条腿(往返)。每条腿都有类似的架构,所以我想对步骤0和步骤1使用相同的表格,条件是只在航班往返时使用step1。

我遇到的问题是我的提交"按钮一直反复加载步骤0,而不是继续前进到第1步,因为它应该用于往返飞行。 (我根据先前请求的get_form_initial()覆盖中每条腿的行程信息预先填充每个表格。我的表单正确填充第一段,它只是无限制地填充每个提交广告的第一条腿数据。

可以制作两种相同的形式,但这似乎是不好的做法。稍微好一些,我可以让回程旅行表格继承自出境旅行表格而不对其进行任何更改 - 这就是我接下来要尝试的更好的解决方案。

但是,我真的想知道是否有办法两次使用同一个表格?

在我的urls.py中:

wizard_forms = [TripCreationForm,TripCreationForm]

urlpatterns = patterns('',
url(r'^trip/wizard/(?P<pk>\d+)$',
    views.CreateTripSetView.as_view(wizard_forms,
         condition_dict=  {'1':show_return_trip_form}), name='admin_add_tripset')

在views.py中

 def show_return_trip_form(wizard):
     """
     Tells the CreateTripSetView wizard whether to show the return trip form
     Args:
        wizard:

    Returns: True if this is a round trip, false if one-way

    """
    cleaned_data = wizard.get_cleaned_data_for_step('0') or {}
    if cleaned_data.get('total_legs') == 2:
        return True
    return False

class CreateTripSetView(SessionWizardView):

    def get_form_initial(self, step):
        """
        Populates the initial form data based on the request, route etc.
        THIS IS ALWAYS FIRING FOR STEP=0 WHEN I HIT SUBMIT.
        Args:
            step:

        Returns:

        """

        initial = self.initial_dict.get(step, {})
        triprequest = TripRequest.objects.filter(id=self.kwargs['pk']).first()
        if triprequest is None:
            return initial

        initial.update({
            'request_id': flight_request.id,
            #other fields set on initial here
        })
        return initial
form.py中的

class TripCreationForm

    #field defs ex.
    request_id = forms.IntegerField()
    #etc.

    def __init__(self, initial, *args, **kwargs):
         object_data = {}
         object_data['request_id'] = initial['request_id']
         #etc.

         super(AnywhereFlightCreationForm, self).__init__(initial=object_data, *args, **kwargs)

编辑: 到目前为止,我已经能够使用TripCreationForm的两个子类来完成这项工作,但两者都没有使用TripCreationForm。

提前致谢!

1 个答案:

答案 0 :(得分:0)

向导需要将它们标识为单独的步骤。也许这会起作用?

wizard_forms = [
        ("form1", TripCreationForm),
        ("form2", TripCreationForm),
]