gpt4 book ai didi

django - 在 django 中引用模板中的动态数量的字段

转载 作者:行者123 更新时间:2023-12-02 09:41:37 24 4
gpt4 key购买 nike

这一切都非常简单。我有这个表格:

class add_basketForm(forms.Form):
def __init__(self, selected_subunits, *args, **kwargs):


self.selected_subunits = selected_subunits
super(add_basketForm, self).__init__(*args, **kwargs)

for subunit in self.selected_subunits:
self.fields['su%d' % (subunit['unit__id'])] = forms.IntegerField()

亚基数量未知。我想使用这样的东西(你明白了):

{% for unit in selected_subunits %}
{{ form.su%s }} % (unit.unit__id)
{% endfor %}

但这当然行不通。我的问题是如何在 Django 模板语言中引用这些表单字段?

最佳答案

为了访问动态字段实例的 BoundField 实例,您可以访问 all of the attributes and methods necessary to render the field ,您需要使用 form.fieldname 的形式访问字段对象,而不是 form.fields[fieldname]

以下是表单类的潜在重构:

class add_basketForm(forms.Form):
def __init__(self, selected_subunits, *args, **kwargs):
super(add_basketForm, self).__init__(*args, **kwargs)
for subunit in self.selected_subunits:
self.fields['su%d' % (subunit['unit__id'])] = forms.IntegerField()

def su_fields(self):
for name in self.fields:
if name.startswith('su'):
yield(self[name])

然后在您的模板中,您应该能够通过访问 form.su_fields 来迭代字段,就像您通常期望的那样:

{% for su_field in form.su_fields %}
....
{% endfor %}

(几个小时以来我一直在解决同样的问题。感谢 this answer from Carl Meyerthis article on dynamic form generation from Jacob Kaplan-Moss 为我指明了正确的方向。)

关于django - 在 django 中引用模板中的动态数量的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com