Django内联表单集

Django内联表单集,django,inline-formset,Django,Inline Formset,我有一个父窗体和几个使用内联窗体集的子窗体。它很好用 根据父窗体中的值,我需要检查是否提交了正确数量的子窗体 我知道在重写BaseInlineFormSet时,我可以使用self.instance.FOO访问父表单,这同样可以正常工作,但我找不到一种方法来确定提交了多少实际表单以及其中包含的数据 有人知道怎么做吗 非常感谢在formsetclean方法中,self.cleaned\u data将是一个字典列表-每个表格一个。因此,您可以: class MyInlineFormSet(formse

我有一个父窗体和几个使用内联窗体集的子窗体。它很好用

根据父窗体中的值,我需要检查是否提交了正确数量的子窗体

我知道在重写BaseInlineFormSet时,我可以使用self.instance.FOO访问父表单,这同样可以正常工作,但我找不到一种方法来确定提交了多少实际表单以及其中包含的数据

有人知道怎么做吗


非常感谢

在formset
clean
方法中,
self.cleaned\u data
将是一个字典列表-每个表格一个。因此,您可以:

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

在formset
clean
方法中,
self.cleaned\u data
将是一个字典列表-每个窗体一个。因此,您可以:

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

谢谢丹尼尔为我指明了正确的方向。通过重写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."
        )
#提交表单计数器
i=0
对于self.forms中的表单:
已清理的\u数据=form.cleaned\u数据
如果清除了这些数据:
#标记为删除的折扣表
如果不是自己,则应删除表格(表格):
i=i+1
如果self.instance.ownership.type=='Joint'且i<2:
引发验证错误(
“指定关节时必须同时输入两个客户端”
“所有权。”
)
等等


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

谢谢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."
        )
#提交表单计数器
i=0
对于self.forms中的表单:
已清理的\u数据=form.cleaned\u数据
如果清除了这些数据:
#标记为删除的折扣表
如果不是自己,则应删除表格(表格):
i=i+1
如果self.instance.ownership.type=='Joint'且i<2:
引发验证错误(
“指定关节时必须同时输入两个客户端”
“所有权。”
)
等等


我还发现我还需要从表单计数中删除在同一篇文章中删除的任何表单。

请添加一些代码,如您的
forms.py
和您的视图和模板,以便我们可以更好地帮助您请添加一些代码,如
forms.py
和您的视图和模板,以便我们能够更好地帮助您