python - form - select django
Controla el tamaƱo del aspecto del widget de TextArea en django admin (1)
Me las arreglé para anular el aspecto de un Widget de TextArea
en la interfaz de administración de django de dos maneras diferentes:
usando formfield_overrides
en admin.py
:
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {''widget'': Textarea(
attrs={''rows'': 1,
''cols'': 40})},
}
...
admin.site.register(Rules, RulesAdmin)
De esta manera es un poco excesivo, ya que cambiará todo el TextField para ese modelo.
con un formulario personalizado:
en forms.py
:
from django.forms import ModelForm, Textarea
from TimePortal.models import Rules
class RulesModelForm(ModelForm):
class Meta:
model = Rules
widgets = {
''parameters'': Textarea(attrs={''cols'': 30, ''rows'': 1}),
}
en admin.py
from AppName.forms import RulesModelForm
class RulesAdmin(admin.ModelAdmin):
form = RulesModelForm
Ambas soluciones redimensionan el TextArea
. Sin embargo, en ambas soluciones, el tamaño real del área de texto es más de 1 fila (en realidad 2 filas). Aquí es cómo se ve el HTML representado:
<div class="form-row field-parameters">
<div>
<label for="id_parameters" class="required">Parameters:</label>
<textarea id="id_parameters" rows="1" cols="30" name="parameters">{}</textarea>
<p class="help">Enter a valid Python Dictionary</p>
</div>
</div>
Y aquí hay un screentshot:
Según la referencia del W3C para el área de texto :
El tamaño de un área de texto también se puede especificar mediante las propiedades de alto y ancho de CSS.
Entonces, mis preguntas son:
- ¿Es el tema css propio de django el responsable del comportamiento "extraño" de este widget?
- ¿Algunos pueden sugerir una manera de resolver este problema?
Este es un problema específico del navegador.
De acuerdo con el subproceso, la altura del área de texto no coincide con las filas en Firefox :
Firefox siempre agrega una línea adicional después del campo de texto. Si quieres que tenga una altura constante, usa CSS ...
Puede establecer un atributo de style
del área de texto:
from django.db import models
from django.forms import Textarea
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {''widget'': Textarea(
attrs={''rows'': 1,
''cols'': 40,
''style'': ''height: 1em;''})},
}
Works for me - probado en Firefox v. 23 y Chrome v. 29.
Espero que ayude.