Pegue este formulário muito simples, por exemplo:
class SearchForm(Form):
q = forms.CharField(label='search')
Isso é renderizado no modelo:
<input type="text" name="q" id="id_q" />
No entanto, quero adicionar o placeholder
atributo a este campo com um valor igual a, Search
para que o HTML seja semelhante a:
<input type="text" name="q" id="id_q" placeholder="Search" />
De preferência, eu gostaria de passar o valor do espaço reservado para CharField
a classe form através de um dicionário ou algo como:
q = forms.CharField(label='search', placeholder='Search')
Qual seria a melhor maneira de conseguir isso?
python
django
django-forms
Joelbitar
fonte
fonte
forms.TextInput
para fazer aattrs={'placeholder': 'Search'}
declaração?Para um ModelForm, você pode usar a classe Meta assim:
fonte
Os outros métodos são todos bons. No entanto, se você preferir não especificar o campo (por exemplo, para algum método dinâmico), você pode usar isto:
Ele também permite que o espaço reservado dependa da instância para ModelForms com a instância especificada.
fonte
ModelMultipleChoiceField
. Obrigado!for f in MyCommentForm.base_fields.values(): f.widget.attrs["placeholder"] = f.label
mas eu gosto mais do seu método construtor.Você pode usar esse código para adicionar um espaço reservado para cada campo TextInput no formulário. O texto para espaços reservados será retirado dos rótulos dos campos do modelo.
fonte
Ótima pergunta. Existem três soluções que eu conheço:
Solução # 1
Substitua o widget padrão.
Solução # 2
Personalize o widget padrão. Se você estiver usando o mesmo widget que o campo normalmente usa, basta personalizá-lo em vez de instanciar um totalmente novo.
Solução # 3
Por fim, se você estiver trabalhando com um formulário de modelo ( além das duas soluções anteriores ), terá a opção de especificar um widget personalizado para um campo, definindo o
widgets
atributo daMeta
classe interna .fonte
self.fields
, por exemplo:for field_name in self.fields: self.fields[field_name].widget.attrs.update({"placeholder": sth})
É indesejável ter que saber como instanciar um widget quando você deseja substituir seu espaço reservado.
fonte
Na maioria das vezes, desejo apenas que todos os espaços reservados sejam iguais ao nome detalhado do campo definido em meus modelos
Adicionei um mixin para fazer isso facilmente em qualquer formulário que eu criar,
E
fonte
Depois de analisar seu método, usei esse método para resolvê-lo.
fonte