Django:在表单字段级别更改DOM ID

tam*_*are 10 django django-forms

据我所知,默认情况下,Django 在使用格式渲染时自动填充每个表单字段的idid_for_%s.可以通过提供auto_id具有不同格式的参数作为Form构造函数的值来修改格式.

然而,这并不是我想要的.我想要完成的是改变我表单中许多字段之一的id.此外,解决方案不应该打破使用form = MyForm(request.POST).

PS.MyForm是一个模型形式,因此每个id都来自其相应的Model字段.

谢谢你的帮助.

Yuj*_*ita 17

表单框架似乎在这里生成标签:

def _id_for_label(self):
    """
    Wrapper around the field widget's `id_for_label` class method.
    Useful, for example, for focusing on this field regardless of whether
    it has a single widget or a MutiWidget.
    """
    widget = self.field.widget
    id_ = widget.attrs.get('id') or self.auto_id
    return widget.id_for_label(id_)
id_for_label = property(_id_for_label)
Run Code Online (Sandbox Code Playgroud)

这意味着您可以使用"id"键为您的字段小部件提供设置为您想要的任何内容.

foo = forms.CharField(widget=forms.TextInput(attrs={'id': 'foobar'}))
Run Code Online (Sandbox Code Playgroud)

或覆盖init并在表单初始化后设置attrs.

我不知道这会如何破坏表格,因为django的表单框架并不知道HTML ID(数据没有传递给服务器......)

  • Yuji - 你是对的.更改_id_不会破坏django的表单框架.我得到了html属性_name_和_id_混淆了.它是_name_属性,Django依赖于将表单映射回模型的实例.谢谢你的回答. (2认同)