Aquí la documentacion para admin site y register decorator
Introducción
Qué aprenderás sobre Django
Historia de web development
Preparación del entorno de trabajo en Mac
Preparación del entorno de trabajo en Windows y Linux
Creación del proyecto Platzigram / Tu primer Hola, mundo! en Django
Vistas
El objeto Request
Solución al reto - Pasando argumentos en la URL
Creación de la primera app
Introducción al template system
Patrones de diseño y Django
Models
La M en el MTV
El ORM de Django
Glosario
Extendiendo el modelo de usuario
Implementación del modelo de usuarios de Platzigram
Explorando el dashboard de administración
Dashboard de Administración
Creación del modelo de posts
Templates, auth y middlewares
Templates y archivos estáticos
Login
Logout
Signup
Middlewares
Forms
Formularios en Django
Mostrando el form en el template
Model forms
Validación de formularios
Class-based views
Class-based views
Protegiendo la vista de perfil, Detail View y List View
CreateView, FormView y UpdateView
Generic auth views
Deployment
Arquirectura / Conceptos / Componentes
¿Cómo conectar Django a una base de datos?
Configurar el servidor
Preparación del VPS (en AWS)
Conclusiones del curso
Bonus
¿Cómo usar los templates en Django?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Registraremos el perfil que acabamos de customizar, junto con el modelo extendido de Usuario, en el admin de Django para poder manejarlo desde la aplicación.
Esto puede hacerse de dos formas: con admin.site.register(Profile)
o creando una nueva clase que herede de Admin.ModelAdmin.
Aportes 39
Preguntas 14
Aquí la documentacion para admin site y register decorator
Para que el verbose_name se visualice en el admin tienes que especificar donde esta la configuración de la app.
users/init.py
default_app_config = 'users.apps.UsersConfig'
How to solve this kind of error:
Exception Value: no such table: main.auth_user__old
Mis apuntes de esta clase:
Una vez hayamos creado nuestro user model.
Para que este sea visible desde Django administration. Debe existir lo siguiente:
# Django:
from django.contrib import admin
# Models:
from users.models import Profile
# Register your models here.
admin.site.register(Profile)
Ahora en cuanto abramos nuestro dashboard saldrá nuestro user model.
Podemos personalizar aún más nuestro dashboard. Para ello Django nos ofrece diversas varibales a través de las cuales podemos modificar la vista o incluso añadir funcionalidad a nuestro dashboard.
# Django:
from django.contrib import admin
# Models:
from users.models import Profile
# Register your models here.
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
# Variable con los campos a mostrar en el dashboard.
list_display = (
'pk',
'user',
'phone_number',
'website',
'picture',
)
# Variable con los campos que serán links.
list_display_links = (
'pk',
'user',
)
# Variable con los campos editables desde dashboard| Nota: No puede haber campos link y editables a la vez.
list_editable = (
'phone_number',
'website',
'picture',
)
# Variable con los campos por los que podemos realizar una busqueda.
search_fields = (
'user__username',
'user__email',
'user__first_name',
'user__last_name',
'phone_number',
)
# Variable que añade un campo por el cual filtrar los datos.
list_filter = (
'created',
'modified',
'user__is_active',
'user__is_staff',
)
¿Por que al decalarar search_fields todos se escriben poniendo user__ antes de declararlos y para phone_number no es necesario? (de hecho user__phone_number arroja un error)
Lo bueno del dashboard del admin de django es que es responsive. Jajajaja
Llevo algunos días tratando de resolver un problema.
Cuando hago login en el dashboard de admnistración la aplicación deja de funcionar y se detiene todo, intente borrar migraciones, incluso cambiar el gestor de BD a MySQL pero no funciona hasta crear un proyecto de cero y probar el dashboard pero sigue igual.
OneToOneField, se refiere, a que solo un usuario va tener un perfil y un solo perfil, y que un perfil solo va a tener un usuario. Casi como una llave primaria compuesta.
El modelo proxy de Django, es muy interesante, en el que podemos definir la no repetición de los registros y que estos sean únicos.
Cuando iba a agregar el list_filter, solo queria filtrar por la fecha creada
list_filter = ('created')
pero me salio un error que necesitaba una lista, luego recorde una vez que alguien habia dicho que el definidor de las lista no son los parentesis sino las comas y me funciono esribiendo asi
list_filter = ('created',)
Cuando pongo los campos created o modified de esta forma:
fieldsets = (
('Profile',{
'fields': (('user', 'picture'),),
}),
('Extra_Info',{
'fields': (
('website', 'phone_number'),
('biography', 'created', 'modified')
)
})
('Metadata',{
'fields': (('created', 'modified'),),
})
)
Me indica que created y modified no son callable. Pero si los meto en Extra info, por ejemplo, me los toma perfecto. Alguien podr[a ayudarme para entender donde esta el problema??```
estoy haciendo igual a como vengo viendo en el tutorial pero se me presento este problema cuando intento acceder al profile
aqui mi codigo de mi model:
"""Users models."""
# Django
from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
"""Profile model.
Proxy model that extends the base data with other
information.
"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
website = models.URLField(max_length=200, blank=True)
bigoraphy = models.TextField(blank=True, )
phone_number = models.CharField(max_length=20, blank=True)
picture = models.ImageField(
upload_to='users/pictures',
blank=True,
null=True
)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
def __str__(self):
# Return username.
return self.user.username
Excelente, me gustó eso de personalizar el admin de django, tengo algunas modelos creados todo lo mostraba en el str, sin poder hacer búsquedas o filtros y menos ver más información de cada registro!
list_display
list_display_links
list_editable
search_fields
list_filter
#Paginación y máximo de registros devueltos.
list_per_page
list_max_show_all
Para quienes quieran que en el admin se vea también las imágenes de una forma bonita… en el archivo models, el modelo profile, agregue:
from django.utils.html import format_html
def picture_data(self):
return format_html('<img src="{}" width="100px" />',self.picture.url)
Luego, en el archivo admin clase ProfileAdmin, en vez de agregar ‘picture’, agregue ‘picture_data’ y …
Personalizar dashboard de Admin
Django tambien nos provee la posibilidad de mostrar un valor del modelo relacionado. Por ejemplo supongamos que tambien queremos añadir el correo del usuario a la tabla de profile, lo que tendríamos que hacer es:
from django.contrib.admin import display
list_display = ('user','phone_number','user_email','picture','website')
@display(description='Email')
def user_email(self, obj):
return obj.user.email
El decorador @display nos permite acceder a esa relación
El orden por el que se ordenan las opciones para filtrar, son las opciones que tenemos definido en el lista.
También podemos agregar filtros, como en los que aparecen en la parte derecha, con list_filter, con los que podemos filtrar.
Si quieres tener cualquier campo a la vista, antes de ser editable, también tiene que estar en la variable, list_display.
El problema aquí es que los campos que estén en la lista de links, no pueden estar en la lista de editables.
Si queremos editar registros en el propio listado, tenemos que especificar esto a través de la variable list_editable.
Podemos definir, que partes del listado, también nos llevan al perfil, con el list_display_links y especificamos los campos que queremos.
Para definir que se muestra, solo necesitamo definir la variable list_display
Ponemos el decorador @admin.register(Nombre del modelo) para extender el modelo.
admin.site.register(Profile), es una forma de extender nuestro modelo y agregarlo al panel. Sin embargo, en este caso, se queda corto en funcionalidades.
Por convención, se le agrega la palabra admin, al final de nuestras clases (En el archivo admin), para extender el modelo. Algo como: ProfileAdmin.
Para extender efectivamente nuestro modelo de usuario.Tenemos que crear en el archivo admin.py de nuestra aplicación, en dónde alberguemos el modelo que queremos extender.
me sales este error por favor una ayuda
django.db.utils.OperationalError: no such table: main.auth_user__old```
Les dejo el código de la clase de profile del admin
from django.contrib import admin
from users.models import Profile
# Register your models here.
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
list_display = ('pk', 'user', 'phone_number', 'website', 'picture')
list_display_links = ('pk', 'user')
list_editable = ('phone_number', 'website', 'picture')
search_fields = ('user__email', 'user__first_name', 'user__last_name', 'phone_number')
list_filter = ('created', 'modified', 'user__is_active', 'user__is_staff')```
This can be useful to understand
uff si es completo, pero creo que practicando cada vez se nos hará más fácil!
No me está funcionando la variable list_display de la clase ProfileAdmin en admin.py de la app users. No me refrescan los titulos cuando los cambio y tampoco me tira ningun error. Alguna idea?
Dónde puedo buscar más documentación de lo que se puede hacer en el admin de Django? él ponía list_display, list_display_links, list_editable, etc etc. Dónde puedo encontrar todas las opciones?
Alguien sabe porque cuando intento abrir la imagen desde el sitio de admin de django me sale esto?
Esto lo puedo extender a los posts, o si tengo un e-commerce lo puedo extender a los productos. Esto si es genial. Cuanto trabajo nos hemos ahorrado. Está el admin y el API.
Que importante es poder leer y entender la documentacion con este framework, no me habia pasado con nada hasta ahora al nivel que me pasa con django.
Este curso la verdad esta muy malo de imagen y de sonido deberian renovar este curso.
¿donde encuentro todas essas variables de list…?
Mi codigo
"""User admin classes"""
#Django
from django.contrib import admin
# Models
from users.models import Profile
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
"""Profile admin. """
list_display = ('pk', 'user', 'phone_number', 'website', 'picture')
list_display_links = ('pk', 'user')
list_editable = ('phone_number', 'website', 'picture')
search_fields = ('user__email', 'user__first_name', 'user__last_name', 'user__phone_number')
list_filter = ('created', 'modified', 'user__is_active', 'user__is_staff')
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.