Backend con Python
> Sesión 03
> Reto-01
- Crear una tabla con el modelo de datos con Django.
- Agregando el modelo al administrador de Django
En este ejemplo vamos a crear una tabla de datos utilizando ORM de Django. En particular vamos a crear la clase zona del modelo para el esquema de base de datos siguiente:
Además vamos agregar el modelo al administrador de Django para poder operar en el.
Para realizar esto debemos seguir las siguientes instrucciones:
-
Utiliza el esquema-entidad relación para poder crear un modelo de nombra
Zona
- Recuerda usar los atributos y tipos de dato adecuado para modelos.
-
Registrar los cambios al modelo mediante migraciones.
- No olvides utilizar los comando
make migrations
ymigrate
- No olvides utilizar los comando
-
Agrega tus modelos al administrador.
- Para esto modifica el archivo
admin.py
. - Recuerda personalizar la salida del modelo usando el método
format
- Para esto modifica el archivo
El resultado deberá ser similar al siguiente:
Solución
Usando el modelo entidad-relación, crear la tabla Zona agregando el siguiente código el archivo Bedutravels/tours/models.py
:
class Zona(models.Model):
""" Define la tabla Zona """
nombre = models.CharField(max_length=45)
descripcion = models.CharField(max_length=256, null=True, blank=True)
latitud = models.DecimalField(max_digits=8, decimal_places=6, null=True, blank=True)
longitud = models.DecimalField(max_digits=8, decimal_places=6, null=True, blank=True)
Observar como el único atributo para crear una Zona es nombre
Avisando a Django que hemos modificado el archivo models.py
:
(Bedutravels) Reto-01/Bedutravels $ python manage.py makemigrations
(Bedutravels) Reto-01/Bedutravels $ python manage.py migrate
(Bedutravels) Reto-01/Bedutravels $
Agregando la tabla Zona al administrador de Django agregando las siguiente líneas al archivo Bedutravels/tours/admin.py
:
from django.contrib import admin
from .models import User, Zona
# Register your models here.
admin.site.register(User)
admin.site.register(Zona)
Abrimos el navegador en la siguiente url
Abrir la url http://localhost:8000/admin y usar los siguientes datos para entrar:
- Usuario: bedutravels
- Clave: bedutravels
Se deberá de ver algo similar a la siguiente imagen después de agregar las siguientes 4 zonas:
- Ciudad de México
- Chiapas
- Guanajuato
- Yucatán
Utiliza el mismo texto para nombre y descripción.
¿Podemos hacer algo para que el nombre del zona aparezca?
Modificando el modelo para User y Zona para que aparezca el nombre según corresponda:
class User(models.Model):
[...]
def __str__(self):
""" Se define la representación en str para User """
return "{} {}".format(self.nombre, self.apellidos)
De forma similar para el modelo de Zona, con lo que se obtiene el siguiente resultado:
También se puede hacer que aparezcan los campos que uno necesite, agregando el siguiente código al archivo Bedutravels/tours/admin.py
:
# Personalizando modelos en el admin
class UserAdmin(admin.ModelAdmin):
# Se sobre escribe lo que hace __str__
list_display = ("id", "nombre", "apellidos", "email", "fechaNacimiento",
"genero", "tipo")
admin.site.register(User, UserAdmin)