我有表单字段**{{form.item}}**,它将呈现给
<input type="text" name="item" >
如何使用自定义模板标签更改表单域的名称属性?
我尝试将表单发送到模板标记,其中
form.fields['item'].widget.attrs['name'] = 'new_name'
但我没有成功。
我需要更改模板中的名称属性。
更新
模型.py
class A(models.Model):
name = models.CharField(50)
type = models.CharField(50)
class B(models.Model):
field1 = ForeignKeyField(A)
value = IntegerField()
查看次数.py
def saving_calculation(request):
SavingFormset = modelformset_factory(A, extra=2)
OfferInlineFormSet = inlineformset_factory(
A, B,
extra = 4
)
if request.method == 'POST':
pass
else:
offer_formset = OfferInlineFormSet()
saving_formset = SavingFormset(queryset=SavingCalculation.objects.none())
return render_to_response(
'purchasing/saving_calculation.html',
{
'offer_formset':offer_formset,
'saving_formset':saving_formset,
}
模板
<form action="." method="POST">
{{ offer_formset.management_form }}
{{ saving_formset.management_form }}
{{ saving_formset.prefix }}
<table>
<thead>
<tr>
<th>Business Unit</th>
<th>Category</th>
<th>Buyer</th>
<th>Offer1</th>
<th>Offer2</th>
<th>Offer3</th>
<th>Offer4</th>
</tr>
</thead>
<tbody>
{% for saving in saving_formset.forms %}
<tr>
<td>{{saving.businessunit}}</td>
<td>{{saving.type_of_purchase}}</td>
<td>{{saving.buyer}}</td>
{% for offer in offer_formset.forms %}
<td>{{ offer|set_field_attr:forloop.counter0 }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
<input type="submit" value="Save" />
</form>
现在,在自定义模板标签中,我需要为内联表单集的每个字段分配新名称
7条答案
按热度按时间wkyowqbh1#
ppcbkaq52#
我已经用几种不同的方法测试了它,它可以与许多类型的表单域一起工作。
在每个要设置名称的字段上使用
set_field_html_name(...)
。brvekthn3#
aor9mmx14#
fzsnzjdm5#
你可以将任何你需要的小部件类子类化,并创建你自己的“渲染方法”。forms.py
wfsdck306#
另一种方法是创建一个自定义输入,它接受一个名为“name”的新参数[我还创建了一个使用此输入的自定义字段]:
5cg8jx4n7#
定义集合字段html名称(分类,新名称):“"”这将在正常小部件呈现周围创建 Package 器,允许自定义字段名称(new_name)。“””old_render = cls.widget.render def widget_render_wrapper(名称,值,属性=无,呈现器=无):return old_render(新名称,值,属性,渲染器=无)