El libro de Django 1.0

17.1. El Zen de la aplicación Admin

En su núcleo, la interfaz de administración de Django está diseñada para una sola actividad: Usuarios confiables editando contenido estructurado.

Sí, es extremadamente simple — pero esa simplicidad implica un montón de asunciones importantes. Toda la filosofía de la interfaz de administración de Django sigue directamente estas suposiciones, así que vamos a ir parte por parte analizando el sentido de esta frase.

17.1.1. "Usuarios confiables ..."

La interfaz de administración está diseñada para ser usada por usuarios en lo que tú, el desarrollador, confías. Esto no significa sólo "gente que ha sido autenticada"; significa que Django asume que se puede confiar que tus editores de contenido harán las cosas correctas.

Significa además que no hay procesos de aprobación para la edición de contenido — si confías en tus usuarios, nadie necesita aprobar sus ediciones. Otra consecuencia es que el sistema de permisos, aunque poderoso, no permite (al momento en el que se escribe esto) limitar accesos basados en objetos específicos. Si confías en que alguien edite sus propias historias, confías en que ese usuario no edite las historias de cualquier otro sin permiso.

17.1.2. "... editando ..."

El propósito primario de la interfaz de administración de Django es dejar que la gente edite información. Esto parece obvio al principio, pero de nuevo tiene poderosas y profundas repercusiones.

Por ejemplo, aunque la interfaz es bastante útil para revisar datos (según se ha descrito), no está diseñada con este propósito en mente. Por caso, nota la ausencia de un permiso "puede ver" (ve el Capítulo 12). Django asume que si la gente puede ver el contenido en la interfaz de administración, entonces también tienen permito editarlo.

Otra cosa más importante es la ausencia de cualquier cosa que se aproxime remotamente a un "flujo de trabajo". Si una tarea dada requiere una serie de pasos, no existe algo que permita forzar a que estos pasos se realicen en un determinado orden. La interfaz se concentra en editar, no en actividades alrededor de la edición. Esta supresión de un flujo de trabajo también proviene del principio de confianza: la filosofía de la interfaz es que este flujo es una decisión personal, no algo que se pueda implementar en código.

Finalmente, nota la ausencia de agregaciones en la interfaz. Esto es, no existe la infraestructura necesaria para mostrar totales, promedios y esas cosas. De nuevo, la interfaz es para editar — y se espera que escribas tus vistas personalizadas para todo el resto.

17.1.3. "... contenido estructurado"

Como el resto de Django, la interfaz prefiere que trabajes con datos estructurados. Esto es porque sólo sirve para editar información almacenada en modelos de Django; para cualquier otra cosa, como datos almacenados en archivos, necesitarás vistas propias.

17.1.4. Parada Completa

A esta altura debería estar claro que la interfaz de administración de Django no intenta ser todas las cosas para toda la gente; y en cambio, elegimos enfocarnos en una cosa y hacerla extremadamente bien.

Cuando se va a extender la interfaz de administración, mucha de esa misma filosofía se sostiene (nota que "extensibilidad" no figura en nuestros objetivos). Debido a que vistas personalizadas pueden hacer cualquier cosa, y debido a que estas puede ser visualmente integradas a la interfaz de administración muy fácilmente (como se describe en la siguiente sección), las posibilidades de personalización incorporadas están un poco limitadas por diseño.

Deberías tener en mente que la interfaz de administración es "sólo una aplicación"; y aunque sea una muy compleja, no hace nada que cualquier desarrollador Django con suficiente tiempo no podría reproducir. Es enteramente posible que en el futuro alguien desarrolle una interfaz de administración diferente que esté basada en un conjunto de asunciones distintas y que por lo tanto se comportará de otra manera.

Finalmente, debemos destacar que, a la fecha que escribimos esto, los desarrolladores de Django trabajaban en una nueva versión de la interfaz de administración que permite mucha más flexibilidad y personalización. Para el momento en que leas esto, esas nuevas características pudieron haberse incorporado a la distribución de Django oficial. Para averiguar al respecto, pregúntale a alguien de la comunidad Django si la rama "newforms-admin" ha sido integrada.