Está en la página 1de 10

13- Django (Panel de Administración y Relaciones Foraneas)

1. Trabajar con clases nos permite definir o crear funciones dentro de


esta que nos permitan mejorar funcionalidad y apariencia de los
datos.

Por ejemplo, en el archivo admin.py, dentro de la clase CursoAdmin


agrega el siguiente código:

def nombreCurso(self,obj):
return obj.nombre.upper()
Y cambia el list_display de la siguiente manera:

De esta manera los valores de ese campo se convertirán a


mayúsculas:

Sería una forma de ajustar el contenido de una tabla para que se vea
de manera uniforme ya que los usuarios al registrar cosas pueden
colocar algunos mayúsculas, otros minúsculas, etc.
2. Si quieres cambiar el título de una columna de la tabla usa

Y si quieres agregar una opción para ordenar la tabla de forma


ascendente o descendente en el campo nombre.

Puedes probar a cambiar el orden


3. No solo se pueden llamar funciones del mismo archivo, también
podemos llamar funciones del modelo, por ejemplo:

En admin.py cambia nombreCurso por nombreColor

4. Y en el archivo models.py agrega la siguiente función.

def nombreColor(self):
if(self.creditos>3):
return format_html('<span
style="color:blue;">{0}</span>'.format(self.nombre))
else:
return format_html('<span
style="color:green;">{0}</span>'.format(self.nombre))

Esta función colorea el texto dependiendo la cantidad de créditos,


si son más de 3, el texto será azul y si son menos será verde.

No olvides importar formar_html

from django.utils.html import format_html

Realiza las pruebas y los registros se muestran personalizados.


5. Para trabajar con las relaciones foráneas debemos crear un nuevo
modelo llamado Docente.

Para el docente se tienen los datos de apellido paterno, apellido


materno, nombres, fecha de nacimiento y sexo (incluimos estos
campos para que veas el manejo de diferentes tipos de datos)

class Docente(models.Model):
apellido_paterno = models.CharField(max_length=20,
verbose_name='Apellido Paterno')
apellido_materno = models.CharField(max_length=20,
verbose_name='Apellido Materno')
nombres = models.CharField(max_length=20,
verbose_name='Nombres')
fecha_nacimiento = models.DateField(verbose_name='Fecha
de Nacimiento')
sexo = models.CharField(max_length=1, choices=sexos,
default='F')

def nombre_completo(self):
return "{} {}, {}".format(self.apellido_paterno,
self.apellido_materno, self.nombres)

def __str__(self):
return self.nombre_completo()

class Meta:
verbose_name = 'Docente'
verbose_name_plural = 'Docentes'
db_table = 'docente'

Se crea una función llamada nombre_completo la cual acomodará


el nombre del docente para mostrarse de forma correcta.

Por último se llama la clase Meta (Son los metadatos propios de la


gestión con la BD, lo que hacemos es definir cómo queremos que se
maneje el nombre de la tabla y el nombre del campo, si no se definen
django los creará de forma automática, como fue el caso de los
cursos, por defecto llamó la tabla ‘Academica_curso’)
Algunas veces ocupamos campos con opciones ya establecidas, para esto,
Django usa Choises, Choices limita la entrada del usuario a los valores
particulares especificados en models.py.

6. Dentro de Academica crea un nuevo archivo llamado choices.py

Y contiene únicamente una tupla con 2 opciones:


sexos = (
('F', 'Femenino'),
('M', 'Masculino')
)

Si observas el modelo, en el campo sexo se está llamando a choices y


como valor por defecto F

Pero para funcionar, debes importarlo ahí en models.py:

from .choices import sexos

De esta manera se crea la estructura del nuevo modelo Docente


7. Para establecer la relación Foranea, al modelo Curso agrega

docente = models.ForeignKey(Docente, null=True, blank=True,


on_delete=models.CASCADE)

null= True es para permitir cursos sin docente definido


blank = True es para permitir valores en blanco

y on_delete indicamos qué pasará si un docente es eliminado, CASCADE


significa que se eliminarán los cursos de ese docente.
En la documentación puedes encontrar otras opciones:
https://docs.djangoproject.com/en/4.2/ref/models/fields/

8. Para poder ver los cambios reflejados, ejecuta el comando:

python manage.py makemigrations


Y nos indica que se creó un archivo con los cambios, un nuevo
modelo llamado Docente y se agregó una columna al modelo
Curso.

9. Para ejecutar la migración ejecutamos el comando:

python manage.py migrate

10. En la base de datos actualiza la información:

Y aparecerá la nueva tabla ‘docente’


11. Para poder usar este nuevo modelo en el panel de administración,
tenemos que agregarlo en el archivo admin.py

Y al final del archivo agrega:

admin.site.register(Docente)

12. Ejecuta el servidor y accede al panel de administración:


Aparecen también los Docentes

13. Selecciónalo y agrega algunos docentes usando el panel


Puedes observar el formulario:
choices permite que aparezca el input en forma de combo

Y el campo de fecha muestra un calendario.

Revisa la tabla de tu base de datos, ya debe contener los registros que


realizaste.
14. Los cursos que ya están registrados no tienen un docente asignado,
asigna un docente a los diferentes cursos.

Selecciona un curso para modificarlo, notarás que se agregó un


combo donde se puede seleccionar el docente.

Después de asignar un docente a cada curso, revisa tu tabla de cursos,


ya aparece el campo docente_id (el cual es una llave foránea) y se
indica el id del docente que está a cargo de ese curso.

También podría gustarte