widgets form fields example combofield bootstrap python css django django-admin

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.