Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:在表单字段级别更改DOM id_Django_Django Forms - Fatal编程技术网

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

Django:在表单字段级别更改DOM id,django,django-forms,Django,Django Forms,我知道,默认情况下,Django会在使用id\u for_u%s格式呈现时自动填充每个表单字段的id。可以通过向表单构造函数提供具有不同格式作为其值的auto_id参数来修改格式 然而,这并不是我想要的。我想要完成的是更改表单中许多字段中的一个字段的id。此外,解决方案不应中断form=MyForm(request.POST)的使用 MyForm是一个模型表单,因此每个id都是从其相应的模型字段派生的 感谢您的帮助。表单框架将在此处生成标签: def _id_for_label(self):

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

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

MyForm是一个模型表单,因此每个id都是从其相应的模型字段派生的


感谢您的帮助。

表单框架将在此处生成标签:

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并在表单初始化后设置属性


我不认为这会破坏表单,因为django的表单框架从来都不知道HTML ID(数据不会传递到服务器…)

您能使用类吗?这当然容易得多,也不容易出错(只需修改小部件)。@sdolan-我忘了提到这个问题是关于模型表单的。我正在寻找解决方案,而不是更改模型字段名。您不必这样做。当您构建
ModelForm
时,它只是在更新字段的小部件。如果可行,我将发布一个完整的解决方案作为答案。@sdolan-我曾尝试在
\uuuu init\uuuu
中更新该字段的小部件,这会在将用户输入返回服务器时破坏逻辑
form=MyForm(request.post)
。除非你的解决方案不同。我发布了一个关于修改类名的答案。看看这是否适用于您的用例。Yuji-您是对的。更改id不会破坏django的表单框架。我把html属性名称和id弄混了。Django依赖于将表单映射回模型实例的name属性。谢谢你的回答。