Добавление атрибута в тег <input> для поля ModelForm django
У меня есть модель django, которую я показываю как форму с помощью ModelForm. По умолчанию для меня очень хорошо работают.
Однако, я бы хотел, чтобы мои теги html <input ...>
имели один дополнительный атрибут, а именно я хотел бы включить атрибут placeholder
, как показано ниже:
<input placeholder="{{field.label}}" ... />
Каков самый простой способ добавить этот атрибут в мой html? Насколько я могу судить, мне кажется, что мне нужно реализовать собственный фильтр для вывода поля, но это кажется излишним, когда все, что я хочу сделать, это оставить все в покое, но добавить еще один атрибут.
Ответы
Ответ 1
Смотри документацию
class AuthorForm(ModelForm):
class Meta:
model = Author
widgets = {
'name': TextInput(attrs={'placeholder': 'name'}),
}
Вы всегда можете создать свой собственный виджет, производный от TextInput и включающий атрибут placeholder, и использовать словарь виджетов для простого сопоставления полей с вашим новым виджетом без указания атрибута placeholder для каждого поля.
Ответ 2
Лично я предпочитаю использовать этот метод:
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or '[email protected]'
Он потребовал больше кода, если у вас еще нет __init__
, но вам не нужно указывать виджет.
Ответ 3
Небольшое изменение на ответ @josh-smeaton.
class AuthorForm(ModelForm):
class Meta:
model = Author
widgets = {
'name': forms.TextInput(attrs={'placeholder': 'name'}),
}
Без "форм". перед TextInput будет вызвано NameError.
Джанго Вер 2.0.1