Django tiende a llenar el espacio horizontal al agregar o editar entradas en el administrador, pero, en algunos casos, es una verdadera pérdida de espacio, es decir, cuando se edita un campo de fecha, de 8 caracteres de ancho, o un CharField, también de 6 u 8 caracteres de ancho, y luego el cuadro de edición sube a 15 o 20 caracteres.
¿Cómo puedo decirle al administrador qué tan ancho debe ser un cuadro de texto o la altura de un cuadro de edición de TextField?
Respuestas:
Debe utilizar ModelAdmin.formfield_overrides .
Es bastante fácil
admin.py
, definir:fuente
filter_horizontal
ofilter_vertical
está configurado para los campos correspondientes en YourModelAdmin. Pasé un tiempo para resolver esto.models.TextField: {'widget': Textarea(attrs={'rows':4})}
pero el ancho también se hizo más pequeño.Puede establecer atributos HTML arbitrarios en un widget utilizando su propiedad "attrs" .
Puede hacer esto en el administrador de Django usando formfield_for_dbfield:
o con una subclase de Widget personalizada y el diccionario formfield_overrides :
fuente
Para cambiar el ancho de un campo específico.
Hecho a través de ModelAdmin.get_form :
fuente
Una opción rápida y sucia es simplemente proporcionar una plantilla personalizada para el modelo en cuestión.
Si crea una plantilla con nombre
admin/<app label>/<class name>/change_form.html
, el administrador utilizará esa plantilla en lugar de la predeterminada. Es decir, si tiene un modelo nombradoPerson
en una aplicación nombradapeople
, crearía una plantilla llamadaadmin/people/person/change_form.html
.Todas las plantillas de administración tienen un
extrahead
bloque que puede anular para colocar cosas en el<head>
, y la pieza final del rompecabezas es el hecho de que cada campo tiene una identificación HTML deid_<field-name>
.Entonces, podría poner algo como lo siguiente en su plantilla:
fuente
Si desea cambiar los atributos en una instancia por campo, puede agregar la propiedad "attrs" directamente en las entradas de su formulario.
por ejemplo:
La propiedad "attrs" básicamente transmite el marcado HTML que ajustará el campo del formulario. Cada entrada es una tupla del atributo que le gustaría anular y el valor con el que le gustaría anularlo. Puede ingresar tantos atributos como desee siempre que separe cada tupla con una coma.
fuente
La mejor forma que encontré es algo como esto:
Es mucho mejor para ModelForm de invalidar campos con diferentes widgets, ya que preserva
name
yhelp_text
atributos y también los valores por defecto de campos del modelo, por lo que no tiene que copiarlos en el formulario.fuente
Tuve un problema similar con TextField. Estoy usando Django 1.0.2 y quería cambiar el valor predeterminado de 'filas' en el área de texto asociada. formfield_overrides no existe en esta versión. Anular formfield_for_dbfield funcionó, pero tuve que hacerlo para cada una de mis subclases de ModelAdmin o resultaría en un error de recursividad. Finalmente, descubrí que agregar el siguiente código a models.py funciona:
Luego use MyTextField en lugar de TextField al definir sus modelos. Lo adapté de esta respuesta a una pregunta similar.
fuente
Está bien descrito en las preguntas frecuentes de Django :
P: ¿Cómo cambio los atributos de un widget en un campo de mi modelo?
R: Anule el campo formfield_for_dbfield en la clase ModelAdmin / StackedInline / TabularInline
fuente
Siempre puede establecer el tamaño de sus campos en una hoja de estilo personalizada y decirle a Django que lo use para su clase ModelAdmin:
fuente
para 1.6, usando formularios tuve que especificar los atributos del área de texto dentro del campo char:
fuente
Misma respuesta que msdin pero con TextInput en lugar de TextArea:
fuente
Aquí hay una solución simple pero flexible. Utilice un formulario personalizado para anular algunos widgets.
Los widgets proporcionados
ElephantForm
reemplazarán a los predeterminados. La clave es la representación de cadena del campo. Los campos no especificados en el formulario utilizarán el widget predeterminado.Tenga en cuenta que, aunque
age
es unIntegerField
, podemos usar elTextInput
widget, porque a diferencia delNumberInput
,TextInput
acepta elsize
atributo.Esta solución se describe en este artículo .
fuente
Si está trabajando con un campo ForeignKey que incluye opciones / opciones / un menú desplegable, puede anular
formfield_for_foreignkey
en la instancia de administrador:Más información sobre este patrón aquí y aquí .
fuente
Y un ejemplo más también:
Si desea editar solo un tamaño de campo específico, puede usar esto.
fuente