Отличный вопрос. Есть три решения, о которых я знаю:
Раствор № 1
Заменить виджет по умолчанию.
class SearchForm(forms.Form):
q = forms.CharField(
label='Search',
widget=forms.TextInput(attrs={'placeholder': 'Search'})
)
Решение № 2
Настройка виджета по умолчанию. Если вы используете тот же виджет, который обычно используется в этом поле, вы можете просто настроить его вместо создания совершенно нового.
class SearchForm(forms.Form):
q = forms.CharField(label='Search')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['q'].widget.attrs.update({'placeholder': 'Search'})
Решение № 3
Наконец, если вы работаете с формой модели, то ( в дополнение к двум предыдущим решениям ) у вас есть возможность указать пользовательский виджет для поля, установив атрибут widgets
для внутренний Meta
класс.
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
widgets = {
'body': forms.Textarea(attrs={'cols': 80, 'rows': 20})
}