Django:如何在构造后为formset添加额外的表单?

mpe*_*pen 17 django django-forms

这大致是我正在尝试做的事情:

def post(request):
    VehicleFormSet = formset_factory(StaffVehicleForm)
    if request.method == 'POST':
        vehicle_formset = VehicleFormSet(request.POST)
        if 'add_vehicle' in request.POST:
            if vehicle_formset.is_valid():
                form_count = vehicle_formset.total_form_count()
                vehicle_formset.forms.append(vehicle_formset._construct_form(form_count))
Run Code Online (Sandbox Code Playgroud)

基本上,如果用户单击"添加"按钮并且其条目有效,我想在表单集中添加另一个空白表单,并隐藏前一个表单.

上面代码的问题是我无法弄清楚如何增加total_form_count().我现在拥有它的方式,它将工作一次,然后如果你再次按下它,什么都不会发生,大概是因为form_count是相同的.我也不喜欢打电话_construct_form和依靠内部.

mpe*_*pen 11

class RequiredFormSet(BaseFormSet):
    def add_form(self, **kwargs):
        # add the form
        tfc = self.total_form_count()
        self.forms.append(self._construct_form(tfc, **kwargs))
        self.forms[tfc].is_bound = False

        # make data mutable
        self.data = self.data.copy()

        # increase hidden form counts
        total_count_name = '%s-%s' % (self.management_form.prefix, TOTAL_FORM_COUNT)
        initial_count_name = '%s-%s' % (self.management_form.prefix, INITIAL_FORM_COUNT)
        self.data[total_count_name] = self.management_form.cleaned_data[TOTAL_FORM_COUNT] + 1
        self.data[initial_count_name] = self.management_form.cleaned_data[INITIAL_FORM_COUNT] + 1

    def add_fields(self, form, index):
        super(RequiredFormSet, self).add_fields(form, index)
        form.empty_permitted = False
Run Code Online (Sandbox Code Playgroud)

那样做.只花了7个小时才搞清楚.我仍然不知道为什么我需要.is_bound = False让初始值不要搞砸.