如何为表单集中的每个表单中的字段设置不同的标签?到目前为止,我看到的解决方案允许在表单集中进行自定义,但相同的自定义同样适用于表单集中表单中的所有字段。
我目前要做的是将标签值存储为表单内的隐藏字段。这是一个表格:
class RepairTypeForm(forms.Form):
amount = forms.FloatField(required=False, min_value=0.01)
repair_name = forms.CharField(widget=forms.HiddenInput(), required=False)
从我这样做的角度来看:
RepairTypeFormSet = formset_factory(RepairTypeForm)
repair_formset_values = [{'repair_name': 'Roof'}, {'repair_name': 'Walls'}]
repair_type_formset = RepairTypeFormSet(initial=repair_formset_values)
和模板:
{{ repair_type_formset.management_form }}
{% for form in repair_type_formset %}
{{ form.repair_name }}
<label for='{{ form.amount.auto_id }}'>{{ form.repair_name.value}}</label>{{form.amount}}
{% endfor %}
最佳答案
这是我的做法。我在 formset 基类中使用了 get_form_kwargs 方法。请注意,form_kwargs 取决于特定的表单实例。为您提供一些上下文......在我的例子中,我想让用户为一堆不同的项目选择一个选项。并希望用户看到这些项目。
from django.forms import formset_factory
from django import forms
from django.forms.formsets import BaseFormSet
class ActionForm(forms.form):
choices = (
('Add', 'Add'),
('Remove', 'Remove')
)
action = forms.ChoiceField(widget = forms.Select, choices = choices)
def __init__(self, item, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['action'].label = item
class ActionFormSet(BaseFormSet):
def get_form_kwargs(self,index):
kwargs = super().get_form_kwargs(index)
item = kwargs['items'][index]
return {'item' : item}
#Views.py
def get_context_data(self, **kwargs)
context = super().get_context_data(**kwargs)
items = ['Apple', 'Orange', 'Banana']
factory = formset_factory(ActionForm, max_num = len(items), formset=ActionFormSet)
formset = factory(form_kwargs={'items':items})
context['formset'] = formset
return context
关于django - 表单集中每个表单中字段的不同标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25101566/