Django inline_formset-form.empty_permitted = False不起作用 [英] django inline_formset - form.empty_permitted = False doesn't work

查看:46
本文介绍了Django inline_formset-form.empty_permitted = False不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个模型-Invoice和InvoiceItem.

I have two models - Invoice and 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中,我具有以下代码集代码.

Inside my CreateViw, I have the following code for the formset.

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

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

However, when I press the Submit button, even if all (two) forms of the formset are empty, the parent form gets submitted.

我在这里想念什么?

谢谢.

推荐答案

而不是使用

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()

to the formset and the following to the form_valid() of the CreateView

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

这篇关于Django inline_formset-form.empty_permitted = False不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆