在Django窗体向导中设置Formset Initial

2024-09-29 23:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Django表单向导中设置formset的初始变量。但是,我不希望在表单向导过程开始时设置这些初始变量,而是希望使用表单向导中上一步中的数据动态创建这些变量。在

使用get_initial_form方法,我可以动态地设置formset中第一个form的初始变量。我想动态设置窗体集中的所有窗体。这可能吗?在

在视图.PY在

 class ContactWizard(SessionWizardView):
    def get_context_data(self, form, **kwargs):
            context = super(ContactWizard, self).get_context_data(form=form, **kwargs)
            if int(self.steps.current) == 1:
                    context.update({'foo': self.get_cleaned_data_for_step('0')})
            return context

    def get_form_initial(self, step, **kwargs):
            initial = self.initial_dict.get(step, {})
            if int(step) == 1:
                    form_class = self.form_list[step]
                    num_of_dates =  self.get_cleaned_data_for_step(str(int(step) - 1))['date'].split(',')
                    form_class.extra = len(num_of_dates)-1

                    initial.update({'slots': 4})
            return super(ContactWizard, self).get_form_initial(step)

    def get_template_names(self):
            return [TEMPLATES[self.steps.current]]

    def done(self, form_list, **kwargs):
            print 'testing'
            return HttpResponseRedirect('main/home.html')

在网址.PY在

^{pr2}$

在表单.PY在

 class ScheduleEventForm(forms.Form):
    time = forms.TimeField(label='Time', widget=forms.TextInput(attrs={'class': 'form-control time_entry_field'}))
    slots = forms.IntegerField(label='Slots', widget=forms.TextInput(attrs={'class': 'form-control slot_field'}))
    date = forms.CharField(label='', widget = forms.HiddenInput())
    class Meta:
            fields = ('time','slots')

Tags: pyselfform表单datagetreturndef
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:07

我不确定在get_form_initial中设置extra是否合适。看看调用get_form_initial,即get_form,最好在get_form_kwargs中设置{},因为返回的值将用于生成form类。在

我是通过这个问题来寻找我自己的答案,如何在表单集中设置字段的初始值。如果我尝试更新initial,那么我的表单集中没有初始表单,并且会崩溃。在进行交互式调试时,它几乎就像期望initial是一个dict列表,集合中的每个表单对应一个dict。在

经过进一步的研究,如果您想为表单集中的字段设置一个初始值,那么您需要传回一个dict数组,其中每个dict都有一个条目。这实际上似乎是BaseModelFormSet(请参见_construct_form)和BaseFormSet中的一种行为,但是如果找不到特定的条目,BaseFormSet会更好地处理错误(至少对于1.10)。在

因此,一旦确定了extra值,就需要用相同的dict填充一个列表,以满足extra值所需的数量。在

相关问题 更多 >

    热门问题