表单集中的表单如何知道表单集中的索引? [英] How can a form within a formset know it's index within the formset?
本文介绍了表单集中的表单如何知道表单集中的索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个基本的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屋!
查看全文