Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Dashboard de Administración

17/37
Recursos

Editaremos el detalle para que sea igual de complejo que el detalle de Usuario y le agregaremos los datos del perfil para no tener que estar cambiando de urls. Usaremos fieldsets y admin.StackedInline.

En la documentación de Django, https://docs.djangoproject.com/en/2.0/ref/contrib/admin/ podemos ver cómo funcionan los fieldsets.

Aportes 47

Preguntas 22

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Es increíble su forma de enseñar, la velocidad en la que va es muy cómoda para mi que ya tenia conocimientos previos, creo que es uno de los mejores profesores que he visto en platzi.

“Vaya, tuve un error en el modelo”
“No pasa nada, borro la base de datos y lo vuelvo a hacer”

WTF?

Creo que va muy acelerada la forma de explicar las cosas. Está muy por encima pero creo que lo complementa muy bien haciendo referencia todo el tiempo a la documentación.
La documentación es el mejor aliado, pero tal vez a alguien que no muy esté acostumbrado, tal vez se aturda en la manera de explicar… es solo mi opinión.

no entiendo porque ponen tanto sobre esta consola de administracion, quiero ver como hacer las cosas sin ella

Enero 2020

Socumentación actualizada

https://docs.djangoproject.com/en/3.0/ref/contrib/admin/

this can help you to understand and remember it

Yo no conocía Django, pero por más que escucho no entiendo nada… la velocidad con la que dice las cosas es demasiado rápida para mi. Creo que solo alguien que ya conoce Django podría seguirle o entender un poco lo que dice… para mi (después de haber escuchado muchas clases en Platzi) es el peor curso que he escuchado de Platzi… sobre todo considerando que está clase es la iniciación y luego hay otra que se llama avanzada…

En un trabajo tenia que hacer una aplicación con frontend , un API y ademas un admin, algo que me costo fué el admin, pero con ésta herramienta todo se facilita. Excelente framework. Creo que me cambiare al backend con django

Me encanta que vean tanto la documentación. Aunque a algunos les parezca poco pedagógico, es lo que hace un programador gran parte del día (el otro porcentaje está en stackoverflow o algún foro viendo porque falló algo que estaba implementando)… creo que es muy ordenado ir viendo la documentación e implementar a partir de lo que dicen las mismas instrucciones.
He aprendido mucho, estoy muy feliz

Cuando pongo los campos created o modified de esta forma:

fieldsets = (
        ('Profile',{
            'fields': (('user', 'picture'),),
        }),
        ('Extra_Info',{
            'fields': (
                ('website', 'phone_number'),
                ('biography')
            )
        })
        ('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??```

Datallé gracias a los campos created y modified que no correspondía la zona horaria, por lo cuál se debe modificar en settings.py el campo TIME_ZONE = ‘America/Bogota’ en mi caso.

Veo mucha gente que se queja por el hecho de que el profesor va mucho a la documentación, explica rápido, etc.

Mi aporte: No se puede aprender lo que él aprendió en 5 años en unas horas. Desafortunadamente, esto no es como jugar con ciclos, tipos de datos o librerías. Es un framework profesional con una documentación de 2000 páginas.

Recomendación: Todo curso debería tener una intro donde se explique el funcionamiento general antes de entrar de lleno al código.

Creo que soy el único que le saco jugo al curso en velocidad x2 xD

Para las personas que les parece que el curso va bastante rapido, pueden utilizar el enlace:
https://tutorial.djangogirls.org/es/

Es una comunidad de Django donde explican de forma sencilla muchas cosas del framework, a mi me sirvió mucho.

Excelente, me gusto mucho esta clase. Trabajando en Windows con el Visual Code y ha sido genial. Enamorandome de Django

En la parte en que te equivocaste con el campo biography hubiese sido interesante ver como resolvías sin borrar la BD, eso es algo que seguramente a muchos nos pasa

Yo al darme cuenta que despues sigue un curso de Django avanzado.

Espero que ahi no tengamos que borrar la base de datos completa por un typo.

Recomiendo

  1. Ver la clase 2 o 3 veces si recien estan empezando.
  2. Ver la clase en velocidad 0.85x

Una forma de agregar las propiedades que ya existen

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name = 'Profile'
    verbose_name_plural = 'Profile'

class UserAdmin(BaseUserAdmin):
    inlines = (ProfileInline,)
    list_display = list(BaseUserAdmin.list_display) + ['is_active']

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

¿Los list_display del admin register y los fieldsets se pueden usar si quiero crear los perfiles en una ruta alterna de este admin dashboard? Es decir quiero que el usuario pueda ver y editar su perfil en una sección distinta y privada de mi sitio web.

¿En dónde encuentro los archivos del curso ahora? Hace tiempo que no entro a platzi y ahora lo estoy retomando

Al cambiar el nombre del atributo en models.py (biography o cualquier otro), el aplicar makemigrations te pregunta si éste ha cambiado, el aplicar despues migrate, automaticamente hace los cambios hasta en la tabla de base de datos, sin necesidad borrarla.

El user no deberia estar ligado al profile? Me surgio la duda al ver que me salio lo siguiente:

Veo que puedo poner el user y el profile ‘cruzados’ y no afecta al programa. Así deberia de ser?

Super atorado con las migraciones, después de eliminar las migraciones y la db trono todo y estuve 1hr revisando que onda. pero pude solucionarlo. reiniciando mi maquina 🕵!

a pesar de que no eh tomado el path completo de backend con python este profesor hace increible el aprendizaje acerca de django, eh tomado otros cursos de django pero este es por mucho el mejor de todos y el que mas valor aporta sin duda alguna alguien que sepa python ya puede entender sin problemas este curso y explotarlo

Es la primera vez q estoy viendo DJango con Python pero el profe Pablo la verdad enseña de donde saca todo me gusta esa relación de documentación/codifico de un mismo momento, creo q es la mejor forma de enseñar

class ProfileInline(admin.StackedInline), para definir que queremos darle administrador a el profile. Dentro de esta clase, definimos. model = (en nuestro caso Profile), can_delete = False, verbose_name_plural = "profiles"(puede ser otro), luego para heredar al usuario admin, importamos: from django.contrib.auth.admin import UserAdmin as BaseUserAdmin. Para heredar lo necesario, en lo siguiente: class UserAdmin(BaseUserAdmin) en la que ponemos la variable: inlines, que lleva una tupla, con el modelo que queremos integrar. Luego de ello ponemos la variable, list_display, en la que ponemos lo que queremos que sea listado.

Ahora que tenemos la interfaz de la forma que queremos. Es momento de linkear users, que viene por default, con los users de nuestro Profile, para ello, tenemos que quitar User del registro, para luego añadirlo, con una clase que contiene lo que nostros queremos.

Para especificar cuáles son los espacios de solo lectura, o read only en inglés, utilizamos la variable, readonly_fields, en el que espcificamos en una tupla, cuáles son esos espacios.

Si no categorizamos los campos, desaparecen decoraciones, que hacen alución a la información que representa.

Lo que hacemos dentro de los campos de un registro, al momento de definir el título, es generar una lista de filas, si anidamos estas en otra tupla, y luego seguimos agregando, entonces vamos a obtener varios campos subyacentes.

si queremos ver varios elementos en filas, entonces solo tenemos que anidarlos dentro de tuplas.

Siempre asegurarse de que haya comas dentro de las tuplas, sobretodo cuándo esta tiene un solo elemento, debido a que no nos podemos confundir.

Cada tupla de fieldsets, lleva dos elementos, un título y luego un diccionario.

Para que se nos muestren los registros de una forma más completa, lo único que vamos a necesitar es trabajar con la variable, fieldsets, la cuál es una tupla de varias dimensiones.

hay que recalcar que nuestros campos a la vista en el administrador, son tuplas que los contienen.

No es necesario borrar la base de datos, solo cambias el error, makemigrations, y luego migrations y ya

El mismo profesor complica las cosas, la verdad que curso tan atorado, explica las cosas como si ya se tuviese idea de lo que habla, se salta muchas cosas y lo único que si no se le olvida es ‘hay muchas cosas en la documentación’.

Es buen profesor pero creo que le da muchas vueltas al tema, al principio era excelente, pero desde hace unos 3 o 4 videos atrás se acelera. voy a volver a repetir, igual la idea es aprender jeje

Existe alguna librería para mostrar el dashboard del “Admin” de django para el frontend. Para que se puede interactuar desde los templates y las vistas.

Saludos.

Cuando pongo los campos created o modified de esta forma:

fieldsets = (
        ('Profile',{
            'fields': (('user', 'picture'),),
        }),
        ('Extra_Info',{
            'fields': (
                ('website', 'phone_number'),
                ('biography')
            )
        })
        ('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??```

Me sale el siguiente error:

class ProfileInline(admin.StackedInLine):
AttributeError: module ‘django.contrib.admin’ has no attribute ‘StackedInLine’

es en la herencia de ProfileInline


class ProfileInline(admin.StackedInLine):
	"""Profile in-line admin for users."""

	model = Profile
	can_delete = False
	verbose_name_plural = 'profiles'

Excelente profesor!

Corren esta sentencia SQL para enmendar los errores producidos por el typo de ‘bigography’ sin tener que borrar la DB:

ALTER TABLE users_profile
RENAME COLUMN bigography TO biography;

Funciona desde SQLite

Prefirió hacer todo el proceso con la data nuevamente, crear db, crear datos a solo cambiar el nombre de del campo y hacer makemigrations. 5 minutos perdidos.

Ejemplo de fieldsets


from django.contrib import admin


class FlatPageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('url', 'title', 'content', 'sites')
        }),
        ('Advanced options', {
            'classes': ('collapse',),
            'fields': ('registration_required', 'template_name'),
        }),
    )

para los que les sirva el canal de pablo trinidad en youtube
https://www.youtube.com/channel/UC-Ol76LwNXj8scU_VtKDxVg

Codigo Actualizado

"""User admin classes"""

#Django
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib import admin

# Models
from django.contrib.auth.models import User
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')
    fieldsets = (
        ('Profile', {
            'fields': (
                ('user', 'picture'),),
        }),
        ('Extra info', {
            'fields': (
                ('website', 'phone_number'),
                ('biography'),
            )
        }),
        ('Metadata', {
            'fields': (('created', 'modified'),),
        })
    )

    readonly_fields = ('created', 'modified',)


class ProfileInLine(admin.StackedInline):
    """ Profile in line admin for users"""

    model = Profile
    can_delete = False
    verbose_name_plural = 'profiles'


class UserAdmin(BaseUserAdmin):
    """Add profile admin to base user admin"""

    inlines = (ProfileInLine,)
    list_display = (
        'username',
        'email',
        'first_name',
        'last_name',
        'is_active',
        'is_staff'
    )


admin.site.unregister(User)
admin.site.register(User, UserAdmin)