django inline_formset - form.empty_permitted = False不起作用

时间:2018-04-11 14:50:23

标签: django inline-formset

我有两个模型 - Invoice和InvoiceItem。

我有以下表格。

class InvoiceItemFormSet(forms.BaseInlineFormSet):

    def __init__(self, *args, **kwargs):
        super(InvoiceItemFormSet, self).__init__(*args, **kwargs)
        for form in self.forms:
            form.empty_permitted = False

    def clean(self):
        cleaned_data=super(InvoiceItemFormSet, self).clean()
        print('inside form.clean')

在我的CreateViw中,我有以下代码用于formset。

ItemInlineFormSet = inlineformset_factory(Invoice, 
InvoiceItem, form=InvoiceItemForm, extra=1,
can_delete=False,validate_min=True, min_num=1,
formset=InvoiceItemFormSet)

但是,当我按下“提交”按钮时,即使表格集的所有(两种)形式都为空,也会提交父表单。

我在这里缺少什么?

感谢。

1 个答案:

答案 0 :(得分:0)

而不是使用

for form in self.forms:
        form.empty_permitted = False

我添加了

def clean(self):
    if self.has_changed() == False:
        raise forms.ValidationError('Please add at least one item to the invoice.')

到formset和以下的CreateView的 form_valid()

if item_formset.is_valid() == False:
    return self.render_to_response(self.get_context_data(form=form,item_formset=item_formset ))