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

django inline_formset - form.empty_permitted = False doesn't work

我有两个模型 - 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 中,我有以下表单集代码。

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

但是,当我按下提交按钮时,即使表单集的所有(两个)表单都是空的,父表单也会被提交。

我在这里缺少什么?

谢谢。

而不是使用

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.')

到表单集,然后到 CreateView

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