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

标签 django django-forms

我知道,默认情况下,Django 会在呈现格式 id_for_%s 时为每个表单字段自动填充 id。 .可以通过提供 auto_id 来修改格式。具有不同格式的参数作为其对 Form 构造函数的值。

然而,这并不是我正在寻找的。我想要完成的是仅更改表单中众多字段之一的 ID。此外,该解决方案不应中断 form = MyForm(request.POST) 的使用。 .

附注。 MyForm 是一个模型表单,因此每个 id 都来自其对应的 Model 字段。

感谢您的帮助。

最佳答案

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

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)

这意味着您可以为您的字段小部件提供一个“id”键,以将其设置为您想要的任何内容。
foo = forms.CharField(widget=forms.TextInput(attrs={'id': 'foobar'}))

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

我不明白这会如何破坏表单,因为 django 的表单框架从来不知道 HTML id(数据没有传递到服务器......)

关于Django:在表单字段级别更改 DOM id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910353/

相关文章:

python - 无法删除 Django 中的 User 对象

python - 多维数组模型 Django

django - 如何呈现不在 UL 中的 Django 表单错误?

django-forms - Django脆皮表单,在模板中隐藏/显示字段

django - 指定模型中的选项和 ModelForm 中的 RadioButton 呈现未选择的值 "------"

django - 如何将所见即所得编辑器与 django flatpages 集成?

django admin - 访问 BaseInlineFormSet 中的 request.user

django - 默认方法执行顺序(Ex :- POST vs perform_create)in Django rest framework class based Views

python - 如何在 FormMixin 中添加两个 form_class?

Django 说它必须是一个模型实例