DJANGO SITIO ADMINISTRATIVO - PERSONALIZAR LISTADO

En esta sesión demostramos cómo implementar personalizaciones a listados del sitio administrativo de Django, incluyendo la selección de columnas mostradas, cómo especificar sus atributos principales, agregar filtros predeterminados, permitir búsquedas y utilizar meta-datos para personalizar etiquetas y orden predeterminado, entre otras características.

Cargando video...

NOTA: Solo puedes ver una versión limitada del video a baja resolución, si quieres ver la versión completa por favor regístrate y obtén alguno de nuestros planes!

Descripción del Vídeo

Podemos personalizar la página de listado de un modelo en el sitio administrativo, incluyendo:

Elegir los campos que se muestran en el listado, y especificar atributos

Personalizar filtros y búsqueda

También podemos utilizar la clase interna Meta en un modelo para personalizar etiquetas, orden predeterminado, entre otras características (que, por supuesto, se reflejan también en la interfaz de administración)

Referencia:
https://docs.djangoproject.com/en/1.8/ref/contrib/admin/

Código disponible en:
https://github.com/networkfaculty/Fundamentos-Django/releases/tag/d-2.2.4
curso/encuestas/admin.py

from django.contrib import admin
from .models import Pregunta, Opcion
from django.forms import Textarea
from django.db import models
class OpcionInline(admin.TabularInline):
model = Opcion
extra = 3
class PreguntaAdmin(admin.ModelAdmin):
formfield_overrides = {
models.CharField: {'widget': Textarea(attrs={'style':'width:90%', 'rows':5})},
}
fieldsets = [
(None, { 'fields': [ 'texto_pregunta' ] }),
('Información adicional', {
'fields': [ 'fe_publicacion' ],
'classes': [ 'collapse' ]
}
),
]
inlines = [OpcionInline]
list_display = [ 'texto_pregunta', 'fe_publicacion', 'publicada_recientemente' ]
list_filter = [ 'fe_publicacion' ]
search_fields = ['texto_pregunta']
admin.site.register(Pregunta, PreguntaAdmin)
#admin.site.register(Opcion)

curso/encuestas/models.py

from django.db import models
from django.utils import timezone
import datetime
class Pregunta(models.Model):
texto_pregunta = models.CharField(max_length=200)
fe_publicacion = models.DateTimeField('Fecha de Publicación')
def __str__(self):
return self.texto_pregunta
def publicada_recientemente(self, dias=1):
return self.fe_publicacion >= timezone.now() - datetime.timedelta(days=dias)
publicada_recientemente.admin_order_field = 'fe_publicacion'
publicada_recientemente.boolean = True
publicada_recientemente.short_description = '¿Publicada recientemente?'
class Meta:
ordering = ['-fe_publicacion']
class Opcion(models.Model):
pregunta = models.ForeignKey(Pregunta)
texto_opcion = models.CharField(max_length=200)
votos = models.IntegerField(default=0)
def __str__(self):
return self.texto_opcion
class Meta:
verbose_name = 'Opción'
verbose_name_plural = 'Opciones'

Rating

Global

Ver video en playlist

comments powered by Disqus

Headshot of Juan Paredes

Juan Paredes

Ingeniero de Sistemas con amplia experiencia, especializado en el desarrollo y arquitectura de software.