Добавление атрибута в тег <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