将属性添加到django ModelForm字段的<input>标记

emm*_*mby 22 django django-forms

我有一个django模型,我使用ModelForm显示为一个表单.在大多数情况下,默认值对我来说非常有效.

但是,我希望我的html <input ...>标签有一个额外的属性,即我想包含一个placeholder属性,如下所示:

<input placeholder="{{field.label}}" ... />
Run Code Online (Sandbox Code Playgroud)

将此属性添加到我的html的最简单方法是什么?据我所知,我需要实现我自己的过滤器来输出字段,但是当我想要做的只是保持一切但添加一个额外属性时,这似乎有些过分.

Jos*_*ton 29

请参阅文档

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        widgets = {
            'name': TextInput(attrs={'placeholder': 'name'}),
        }
Run Code Online (Sandbox Code Playgroud)

您始终可以创建自己的窗口小部件,该窗口小部件派生自TextInput并包含占位符属性,并使用窗口小部件字典将字段简单地映射到新窗口小部件,而无需为每个字段指定占位符属性.


Mar*_*ark 15

我个人更喜欢使用这种方法:

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'
Run Code Online (Sandbox Code Playgroud)

如果您还__init__没有,则需要更多代码,但您不需要指定小部件.