Django trabaja con un concepto llamado ORM el cual abstrae la base de datos que utilizas convirtiéndola en una representación orientada a objetos donde los conceptos tablas, registros y campos se representan como clases, objetos y atributos respectivamente. El modelo es la representación de nuestros datos y este contiene toda la información y el comportamiento de los datos que almacenamos. Por tanto, un modelo es una clase en python que hereda de la clase models que provee django. Para acceder a la información almacenada django proporciona una API con funciones para todas las operaciones que normalmente tendríamos que hacer utilizando SQL. En el artículo anterior dejamos django instalado, con una configuración básica y con la estructura recomendada por las buenas prácticas para facilitar el desarrollo de medianas y grandes aplicaciones manteniendo la escalabilidad. Siguiendo con esta filosofía hoy nos adentramos en la capa de datos del framework analizando las principales características de los modelos en Django. Los modelos se definen en el fichero models.py siguiendo la estructura del siguiente ejemplo: from django.db import models # Importamos la clase models django para heredar class Persona(models.Model) # Heredamos de la clase models de django nombre = models.CharField(max_length=30) # Campo nombre de tipo texto con un máximo de 30 caracteres apellidos = models.CharField(max_length=30) # Campo apellidos de tipo texto con un máximo de 30 caracteres Tipos de Campos En este apartado mostramos los tipos de campos que proporciona Django para incluir en los modelos: Para cadenas de caracteres: CharField() TextField() – Para más cantidad de texto Para números: IntegerField() BigIntegerField() – Para números muy grandes PositiveIntegerField() – Solo soporta números positivos DecimalField() – Números decimales, tiene opciones como max_digits para definir el número máximo de dígitos y decimal_places para definir el número de posiciones decimales que puede admitir. Para booleanos: BooleanField() Solo soporta true o false Para fechas: DateField() – Solo captura la fecha DateTimeField() – Captura la fecha y la hora TimeField() – Solo captura la hora Para archivos: FileField() Para imágenes: ImageField() Para correos electrónicos: EmailField() Todos estos campos vienen con las validaciones necesarias implementadas para que solo admitan los valores que representan. Para relacionar modelos: OneToOneField() – Relación de uno a uno ForeignKey() – Relación de uno a muchos ManyToManyField() – Relación de muchos a muchos Relaciones En cualquier aplicación, o en la mayoría para no ser absolutos va a ser necesario establecer relaciones entre tablas de la base de datos. Como enunciamos anteriormente en los tipos de campos, django proporciona 3 tipos para establecer relaciones entre modelos, OneToOneField(), ForeignKey() y ManyToManyField(). Uno a uno: Para ejemplificar una relación de uno a uno pondremos el ejemplo de una red social, donde un usuario se relaciona con un perfil únicamente y a su vez ese perfil es solo de ese usuario. Para representar esta situación en Django sería de la siguiente manera: class Usuario(models.Model): usuario = modes.CharField(max_length=50) class Perfil(models.model): usuario = models.OneToOneField(Usuario) edad = models.PositiveIntegerField() Uno a muchos: Para ejemplificar una relación de uno a uno pondremos el ejemplo del uso de tarjetas de crétdito por las personas, donde una persona puede tener muchas tarjetas de crédito pero una tarjeta de crédito puede ser solo de una persona: class Persona(models.Model): nombre = models.CharField() class Tarjeta(models.Model): propietario = models.ForeignKey(Persona) monto = models.DecimalField() Muchos a muchos: Para ejemplificar una relación de uno a uno pondremos el ejemplo de la docencia, donde existen alumnos y cursos, de forma que un alumno puede tener muchos cursos y a su vez un curso puede estar conformado por muchos alumnos: class Alumno(models.Model): nombre = models.CharField() class Curso(models.Model): alumnos = models.ManyToManyField(Alumno) capacidad = models.PositiveIntegerField() Migraciones: Una vez definidos nuestros modelos pasamos a realizar las migraciones, las cuales automatizan el proceso al momento de hacer cambios en el modelo. Al crear una aplicación Django crea automáticamente una carpeta migrations, donde alojará todas las migraciones que se realizan en nuestro modelo. Para que Django reconozca los modelos que implementes a la hora de hacer migraciones debes asegurarte de que la aplicación este registrada en settings.py en installed_apps, algo similar a: INSTALLED_APPS = { ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘myapp’ # Incluimos el nombre de nuestra aplicación } Para crear las migraciones ejecutamos el comando python manage.py makemigrations. Este comando reconoce los modelos y crea las migraciones necesarias en la carpeta migrations antes mencionada. Para aplicar las migraciones que se realizaron se ejecuta el comando python manage.py migrate. De esta forma se crea el modelo en la base de datos. Cada vez que se realicen cambios en la base de datos deben ejecutarse los comandos make_migrations y migrate para actualizar el modelo, estos detectan cuales fueron estos cambios y los refleja en la fuente de datos real. Podemos ver las migraciones que se han aplicado con el comando python manage.py migrate -l o también podemos listar las migraciones por cada aplicación escribiendo python manage.py migrate myapp -l, a la izquierda se muestran marcadas las migraciones aplicacdas con una X. Para regresar a una migración anterior podemos utilizar el comando python manage.py migrate myapp 0005 donde 0005 sería el número de la migración a donde queremos regresar. De esta manera hemos hecho un resumen de lo principal que debes dominar para comenzar a explorar la capa de modelo de Django, te recomiendo que pruebes en conjunto el artículo anterior y este dejandonos las dudas que te vayan surgiendo o tus impresiones sobre lo que aquí planteamos. Si les gustó el artículo déjanos tus comentarios, los valoramos mucho por acá y nos reconforta saber que nuestro tiempo invertido los ayuda en algo. Saludos
Copia y pega esta URL en tu sitio WordPress para incrustarlo
Copia y pega este código en tu sitio para incrustarlo