Tome esta forma muy simple, por ejemplo:
class SearchForm(Form):
q = forms.CharField(label='search')
Esto se representa en la plantilla:
<input type="text" name="q" id="id_q" />
Sin embargo, quiero agregar el placeholder
atributo a este campo con un valor de Search
para que el HTML se vea así:
<input type="text" name="q" id="id_q" placeholder="Search" />
Preferiblemente me gustaría pasar el valor del marcador de posición a CharField
la clase de formulario a través de un diccionario o algo así como:
q = forms.CharField(label='search', placeholder='Search')
¿Cuál sería la mejor manera de lograr esto?
python
django
django-forms
Joelbitar
fuente
fuente
forms.TextInput
para hacer laattrs={'placeholder': 'Search'}
declaración?Para un ModelForm, puede usar la clase Meta así:
fuente
Los otros métodos son todos buenos. Sin embargo, si prefiere no especificar el campo (por ejemplo, para algún método dinámico), puede usar esto:
También permite que el marcador de posición dependa de la instancia de ModelForms con la instancia especificada.
fuente
ModelMultipleChoiceField
. ¡Gracias!for f in MyCommentForm.base_fields.values(): f.widget.attrs["placeholder"] = f.label
pero me gusta más tu método de construcción.Puede usar este código para agregar el atributo de marcador de posición para cada campo TextInput en su formulario. El texto para los marcadores de posición se tomará de las etiquetas de campo del modelo.
fuente
Gran pregunta Hay tres soluciones que conozco:
Solución n. ° 1
Reemplace el widget predeterminado.
Solución n. ° 2
Personaliza el widget predeterminado. Si está utilizando el mismo widget que el campo generalmente usa, simplemente puede personalizarlo en lugar de crear una instancia completamente nueva.
Solución # 3
Finalmente, si está trabajando con un formulario modelo, entonces ( además de las dos soluciones anteriores ) tiene la opción de especificar un widget personalizado para un campo configurando el
widgets
atributo de laMeta
clase interna .fuente
self.fields
, por ejemplo:for field_name in self.fields: self.fields[field_name].widget.attrs.update({"placeholder": sth})
No es deseable tener que saber cómo crear una instancia de un widget cuando solo desea anular su marcador de posición.
fuente
La mayoría de las veces solo deseo tener todos los marcadores de posición iguales al nombre detallado del campo definido en mis modelos
Agregué un mixin para hacer esto fácilmente a cualquier forma que cree,
Y
fuente
Después de mirar su método, utilicé este método para resolverlo.
fuente