表单集中的表单如何知道表单集中的索引? [英] How can a form within a formset know it's index within the formset?

查看:89
本文介绍了表单集中的表单如何知道表单集中的索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基本的Form子类,其生成的表单集如下:

I have a basic Form subclass with a formset generated such as:

MyFormset = formset_factory(
    MyForm,
    extra=5,
    max_num=5,
)

我希望能够从 form.save() form .__ init __ 方法。

推荐答案

您可以将BaseFormSet子类化以将索引传递给以下形式:

You can subclass BaseFormSet to pass the index to the form:

from django.forms.formsets import BaseFormSet

class BaseMyFormSet(BaseFormSet):
    def add_fields(self, form, index):
        """A hook for adding extra fields on to each form instance."""
        super(BaseMyFormSet, self).add_fields(form, index)
        # here call a custom method or perform any other required action
        form.set_index(index)

MyFormset = formset_factory(
    MyForm,
    formset=BaseMyFormSet,
    extra=5,
    max_num=5,
)

将为表单集中的每个已创建表单调用此方法,您可以执行

This method will be called for each created form in the formset, you may perform whatever operation you need.

要保存索引,我看到两种可能性:

To get the index on save, I see two possibilities:

1)您使用您在上面的set_index方法中设置的隐藏字段

1) You use an hidden field that you set in the set_index method above

class MyForm(forms.Form):
    formset_index = forms.IntegerField(widget=forms.HiddenInput())

    def set_index(self, index):
        self.fields['formset_index'].initial = index

2)您可以使用枚举

# definition
class MyForm(forms.Form):
    def save(self, index):
    ...

# save
for index, form in enumerate(my_formset):
   form.save(index)

这篇关于表单集中的表单如何知道表单集中的索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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