Django内联表单集

时间:2018-12-14 15:19:15

标签: django inline-formset

我有一个内联表单集有一个父表单和几个子表单。很好。

根据父表单中的值,我需要检查是否已提交正确数量的子表单。

我知道我可以在覆盖BaseInlineFormSet时使用self.instance.FOO访问父窗体,这仍然可以正常工作,但是我找不到确定已提交多少实际窗体以及其中至关重要的数据的方法。

有人知道吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

在formset clean方法中,self.cleaned_data将是字典的列表-每种形式一个。因此,您可以这样做:

class MyInlineFormSet(formsets.InlineFormSet):
    def clean(self):
        if len(self.cleaned_data) != self.instance.my_value:
            raise forms.ValidationError('wrong number of forms')

答案 1 :(得分:0)

感谢Daniel指出正确的方向。我通过重写baseinlineformset并在clean方法中执行以下操作来实现所需的功能:

    # submitted form counter
    i = 0

    for form in self.forms:
        cleaned_data = form.cleaned_data
        if cleaned_data:
            # discounts forms marked for deletion
            if not self._should_delete_form(form):
                i = i + 1

    if self.instance.ownership.type == 'Joint' and i < 2:
        raise ValidationError(
            "You must enter both clients when specifying joint "
            "ownership."
        )

我还发现,我还需要从表单计数中删除同一帖子中被删除的所有表单。