En la página de índice de administración de Django, la aplicación y sus modelos se mostrarán normalmente. ¿Cómo se pueden enumerar los objetos modelo en esta página de índice? En lugar de mostrar solo la aplicación, también quiero mostrar sus objetos modelo. ¿Cómo debería ser personalizado?Personalizar la página de índice de administración de Django para mostrar los objetos del modelo
Respuesta
Quería la misma funcionalidad para mi sitio y la agregué haciendo pequeñas modificaciones al sistema core django.
Paso 1: Primero necesitamos una forma de indicar qué modelos deben tener sus propiedades en la lista. Agregue el código siguiente para los modelos para los que desea los casos mencionados (en models.py):
class Meta:
list_instances = True
Paso 2: tenemos que modificar Django para reconocer y leer este nuevo atributo. En el archivo de núcleo-django: db/modelos/options.py, más o menos en la línea 22 'de agregación list_instances' a DEFAULT_NAMES:
DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'unique_together', 'permissions', 'get_latest_by',
'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'auto_created', 'list_instances')
y en el mismo archivo, más o menos en la línea 52, cree un campo predeterminado de este atributo justo después de los otros atributos:
self.list_instances = False
Paso 3: Tenemos que pasar esta información a la plantilla que genera la página de índice. En el archivo de núcleo-django: contrib/admin/sites.py, método index() en el interior y en el interior del "si": has_module_perms parte, añadir el siguiente código:
instances = []
if (model._meta.list_instances == True):
instances = model_admin.queryset(None)
Esto creará la lista de instancias para mostrar , pero solo si se establece el atributo list_instance. En el mismo archivo, unas pocas líneas más abajo, añada estos valores al constructo "model_dict".
model_dict = {
'name': capfirst(model._meta.verbose_name_plural),
'admin_url': mark_safe('%s/%s/' % (app_label, model. __name__.lower())),
'perms': perms,
'list_instances':model._meta.list_instances,
'instances': instances,
}
Paso 4: El paso final es para modificar la plantilla para apoyar esto. Edite el archivo core-django /contrib/admin/templates/admin/index.html o copie este archivo en el directorio templates/admin/de su aplicación específica. Agregue algunas líneas después del código estándar para generar filas para generar las "sub-filas" si corresponde. Aproximadamente en la línea 40, justo entre "/ tr>" y "{% endfor%}":
{% if model.list_instances %}
{% for instance in model.instances %}
<tr>
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
{% if model.perms.change %}
<td><a href="{{ model.admin_url }}{{ instance.id }}/" class="changelink">{% trans 'Change' %}</a></td>
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
{% endif %}
Esto hará que el elemento a la lista con el método nombre generado por el Unicode() de la modelo.
Paso 5: Lo and behold!Debe ser algo como esto:
Editar: Opcional Paso 6: Si desea que los nombres de instancia se pueda hacer clic también, al cambiar la plantilla (index.html) y reemplazar:
<td colspan="2" style="padding-left: 2em;">{{ instance }}</td>
con:
<td colspan="2" style="padding-left: 2em;">
{% if model.perms.change %}
<a href="{{ model.admin_url }}{{ instance.id}}">{{ instance }}</a>
{% else %}
{{ instance }}
{% endif %}
</td>
Puede hacer esto cambiando las diversas plantillas de administración - la raíz se llama app_index.html
y controla lo que se muestra allí. La mejor manera de investigar qué está sucediendo es instalar django-debug-toolbar y luego mirar las plantillas que se utilizan para cada vista para descubrir cómo personalizar.
Totalmente correcto ... pero este es un camino largo y oscuro para bajar, lo he intentado antes. El django-admin no fue hecho para ser particularmente modular o extensible. ¿Está seguro de que el usuario no puede simplemente hacer clic en uno de estos enlaces primero? – Dave
ACTUALIZACIÓN Se respuesta de tomidor para django 10
Siempre es bueno volver a esta solución limpia!
paso 2 - es alrededor de la línea 125 (era 52)
paso 3 - en sites.py - actualizar el nuevo método -
_build_app_dict
dentro del bucle: for model, model_admin in models.items():
agregue el paso 3 como se indica alrededor de las líneas 430 y 460
instances = []
if (model._meta.list_instances == True):
instances = model_admin.get_queryset(None)
- 1. personalizar el panel de administración de django?
- 2. Django aplicación de administración para la página principal/detalle
- 3. Filtrando los resultados del modelo para el cuadro de selección de administración de Django
- 4. Definición de una lista de aplicaciones personalizada en la página de índice de administración de django
- 5. Eliminando 'Sitios' de la página de administración de Django
- 6. Mostrar filas secundarias en la interfaz de administración de Django
- 7. Herencia de modelo de Django y sistema de administración
- 8. ¿Cómo personalizar la página de administración de usuario auth en Django CRUD?
- 9. Django modelo de línea de administración de usuario
- 10. Página de administración de Django no encontrada
- 11. Django acceder modelo de objetos ForeignKey
- 12. django error unicode en la página de administración
- 13. ¿Cómo extender la vista de administración de django?
- 14. Captación de objetos del modelo heredado de Django
- 15. Agregar enlace a la página de administración de django
- 16. Nombre detallado para el modelo de administración Clase en django
- 17. línea Django de administración para ManyToMany recursiva
- 18. Para un modelo de django, ¿cómo puedo obtener la URL de administración de django para agregar otra, o enumerar objetos, etc.?
- 19. Cómo mostrar una propiedad booleana en la administración de Django
- 20. ¿Es posible cambiar el nombre del modelo en el sitio de administración de django?
- 21. Fecha de creación automática para objetos de formulario modelo django?
- 22. de administración de WordPress: Mostrar páginas de borrador en la página Atributos de página padre desplegable
- 23. Cambiar nombre de clase del modelo en la interfaz de administración de Django
- 24. Viendo el model's__unicode__ de administración de Django
- 25. Cómo anulo help_text en la interfaz de administración de django
- 26. Django administración ManyToManyField
- 27. Django administrador vista de lista Personalizar Nombre de la columna
- 28. django: mostrar usuarios de grupo cuenta en administración
- 29. sitio de administración de Django: ¿cómo crear una sola página para configuraciones globales?
- 30. Página de administración de Django que no muestra
buena explicación !! ¡¡Gracias!! – Nava
que había enseñado como un profesor ;-) gracias una vez más. – Nava
No hay problema. :) Lo necesitaba para mí también. Si también lo desea al hacer clic en su aplicación específica, vaya a contrib/admin/sites.py nuevamente y agregue las mismas pocas filas como lo hizo en el método index() al método app_index() también. – Setomidor