将属性添加到 django ModelForm 字段的 <input> 标记
Posted
技术标签:
【中文标题】将属性添加到 django ModelForm 字段的 <input> 标记【英文标题】:Adding an attribute to the <input> tag for a django ModelForm field 【发布时间】:2011-05-19 12:14:37 【问题描述】:我有一个 django 模型,我使用 ModelForm 将其显示为表单。在大多数情况下,默认设置对我来说效果很好。
但是,我希望我的 html <input ...>
标记具有一个附加属性,即我想包含一个 placeholder
属性,如下所示:
<input placeholder="field.label" ... />
将此属性添加到我的 html 的最简单方法是什么?据我所知,我似乎需要实现自己的过滤器来输出该字段,但是当我想要做的就是不理会所有事情但添加一个额外的属性时,这似乎有点过头了。
【问题讨论】:
【参考方案1】:见documentation
class AuthorForm(ModelForm):
class Meta:
model = Author
widgets =
'name': TextInput(attrs='placeholder': 'name'),
您始终可以创建自己的小部件,该小部件从 TextInput 派生并包含占位符属性,并使用小部件字典将字段简单地映射到您的新小部件,而无需为每个字段指定占位符属性。
【讨论】:
【参考方案2】:我个人更喜欢使用这种方法:
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or 'email@address.nl'
如果您还没有__init__
,则需要更多代码,但您不需要指定小部件。
【讨论】:
工作就像一个魅力以上是关于将属性添加到 django ModelForm 字段的 <input> 标记的主要内容,如果未能解决你的问题,请参考以下文章
Django - 带有 ModelForm 的属性和重新定义的字段?
Django 将额外字段添加到从模型生成的 ModelForm