Python Django多窗口小部件和字段标签

Python Django多窗口小部件和字段标签,python,django,django-forms,Python,Django,Django Forms,我需要一个Django表单,它包含3个表单.Textarea,这些表单被压缩成一个models.TextField兼容值。为此,我对forms.MultiValueField和forms.MultiWidget进行了子类化。我的问题是试图确定在何处以及如何向小部件的textarea输入添加标签 我目前正在做的是将标签值作为attr传递给小部件的子小部件: class ContentWidget(forms.MultiWidget): 模板名称='content\u widget.html' 定义

我需要一个Django表单,它包含3个
表单.Textarea
,这些表单被压缩成一个
models.TextField
兼容值。为此,我对
forms.MultiValueField
forms.MultiWidget
进行了子类化。我的问题是试图确定在何处以及如何向小部件的
textarea
输入添加标签

我目前正在做的是将标签值作为
attr
传递给小部件的子小部件:

class ContentWidget(forms.MultiWidget):
模板名称='content\u widget.html'
定义初始化(self,attrs=None):
小部件=(
forms.Textarea({'label':'A'}),
forms.Textarea({'label':'B'}),
forms.Textarea({'label':'C'}),
)
super().\uuuu init\uuuuu(小部件、属性)
这使得
content\u widget.html
非常简洁:

{% for subwidget in widget.subwidgets %}
  <label for="{{ subwidget.attrs.id }}">{{ subwidget.attrs.label }}</label>
  {% include subwidget.template_name with widget=subwidget %}
  <br />
{% endfor %}
另一种选择是将其显式地包含在模板的较长版本中:

<label for="{{ widget.subwidgets.0.attrs.id }}">A</label>
{% include widget.subwidgets.0.template_name with widget=subwidget %}
...

我关心的是,这使得代码更难维护,这表明我在这里遗漏了一些明显的东西。我的问题是是否有更一致的方法。

我发现做类似事情的唯一方法是添加占位符属性

class TimedeltaWidget(forms.MultiWidget):
定义初始化(self,fields,attrs=None,*args,**kwargs):
字段[0].widget.attrs={'placeholder':uz('Days')}
字段[1]。widget.attrs={'placeholder':uz('Hours')}
字段[2].widget.attrs={'placeholder':(('Minutes')}
字段[3]。widget.attrs={'placeholder':\('Seconds')}
widgets=(字段[0]。widget,字段[1]。widget,字段[2]。widget,字段[3]。widget,)
super(TimedeltaWidget,self)。\uuuu init\uuuu(widgets,attrs)
结果如下:


这正是我当前的问题(我的字段是动态创建的,因此“长格式”选项对我不可用)。你有没有达成令人满意的解决方案?我即将完全抛弃
MultiWidget
。@simon我最终切换到vue作为前端,并使用django作为api层。啊,我可以在这个项目的未来看到这种可能性。。。谢谢