Cómo utilizar Django Admin correctamente
1. Django Admin no es adecuado para usuarios finales
Django admin está diseñado para administradores, no para usuarios finales. Django admin existe para facilitar a los administradores agregar, modificar, eliminar datos y administrar. tareas del sitio.
2. Visualización de lista
Como se muestra arriba, debido a que la visualización de texto predeterminada del modelo es el objeto xxx, el texto predeterminado que se muestra en la página de lista de administración también es el objeto xxx. Si queremos mostrar más información útil, podemos realizar las siguientes configuraciones:
Escribir el método __unicode__() para el modelo
Si desea que el modelo muestre más elementos. la página de lista, luego necesita usar list_display
__unicode()__ ejemplo:
# models.py
de django.db importar modelos
artículo de clase (modelos.Model):
título = modelos.CharField(max_length=100)
slug = modelos.CharField(max_length=100)
contenido = modelos .TextField()
is_published = modelos.BooleanField(default=False)
def __unicode__(self):
return self.title
# admin.py
de django.contrib importar administrador
de .models importar artículo
admin.site.register(Artículo )
Resultado:
Si desea mostrar otros elementos:
# admin.py
de django.contrib import admin
de .models importar artículo
clase ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published')
admin.site.register( Article, ArticleAdmin)
Resultado:
3. Agregar acciones a ModelAdmin
Podemos agregar métodos o funciones a ModelAdmin para realizar la interfaz de administración es más adecuada para nuestros requisitos.
Por ejemplo, queremos mostrar una URL clara en la interfaz de administración, pero cuando definimos el método get_absolute_url() en el modelo, el administrador de Django nos da por Por defecto una URL similar a la nuestra. La URL deseada es una URL completamente diferente. Así que podemos definir la URL a través del siguiente método:
# admin.py
from django.contrib import. admin
de django.core.urlresolvers importar reverso
de django.utils.html importar format_html
de .models importar artículo
clase ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published',)
readonly_fields = (' show_url',)
def show_url(self, instancia):
url = inversa('article_detail', kwargs={'pl': instancia.pk})
respuesta = format_html("""Vista previa del artículo""", url)
devolver respuesta
show_url . short_description = u"Vista previa del artículo"
# Mostrar etiqueta HTML
# ¡Nunca configure esto para datos enviados por usuarios!
show_url.allow_tags = True
Tenga en cuenta que el valor predeterminado del atributo enable_tags es Falso, lo que puede causar riesgos de seguridad si se usa incorrectamente. Si se establece en Verdadero,
se permitirá que las etiquetas HTML se muestren en el administrador. El principio que utilizamos es que enable_tags=True nunca debe configurarse para información ingresada por el usuario.
Allow_tags=True solo se puede usar cuando el contenido es generado por el sistema y el usuario no puede modificarlo.
4. No utilice list_editable en un entorno de edición multiusuario
El administrador de Django nos proporciona la función de modificar los atributos del modelo en la página de lista, lo que lo hace conveniente para el administrador. modificar varios atributos a la vez si solo hay un administrador
Eso no es un problema, pero en un entorno multiusuario, habrá un problema potencial muy grave debido a la información de modificación enviada en la página de lista. registra la ubicación, no el modelo. La clave principal de .
Por ejemplo, la página de lista de artículos está organizada en orden inverso al de creación de forma predeterminada. El usuario A abre la página de lista de artículos y comienza a modificarla. al mismo tiempo, el usuario B agrega un nuevo artículo. En este momento, p>
Cuando el usuario A envía modificaciones, toda la información del artículo posterior será incorrecta.