将属性添加到 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 &lt;input ...&gt; 标记具有一个附加属性,即我想包含一个 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

Django:ModelForm 自定义错误消息和占位符

基于下拉值选择显示Django ModelForm中的链接

Django 'QuerySet' 对象没有使用 modelform 的属性'split'

Django:带有条件的ModelForm