Modelos base en Django
En el vasto panorama del desarrollo de aplicaciones web, adherirse a patrones y estándares de código consistentes desempeña un papel vital en la creación de un código mantenible y reutilizable.
Al comenzar un nuevo proyecto de Django, es una buena idea definir un conjunto de modelos base que puedan ser utilizados como base para todos los demás modelos. Esto ayudará a garantizar que tus modelos sean consistentes y predecibles, y facilitará la incorporación de nuevas funcionalidades en el futuro.
Para hacer esto, podemos crear una nueva clase de modelo abstracto que contenga todos los campos y comportamientos comunes que deseas que tengan tus modelos. Luego, podemos crear subclases de esta clase de modelo base para cada uno de tus modelos.
Guardar fecha de creación y modificación
Guardar el timestamp de creación y modificación es una necesidad común en muchas aplicaciones web. Para lograr esto de manera consistente en todos los modelos de nuestro proyecto, podemos crear una clase de modelo abstracta base que contenga los campos created_at
y updated_at
, y luego utilizar esta clase de modelo base como base para todos nuestros demás modelos.
class TimestampedModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
Utilizar UUID como claves primarias en lugar de enteros
Utilizar enteros como claves primarias es una práctica común en Django, pero no es la única opción. De hecho, existen varias ventajas al utilizar UUID en lugar de enteros.
Con el siguiente fragmento de código, podemos crear una nueva clase de modelo abstracta base que utilice UUID como claves primarias en lugar de enteros:
class UUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
class Meta:
abstract = True
Poniéndolo todo junto
Ahora que hemos definido nuestras clases TimestampedModel
y UUIDModel
, podemos usarlas individualmente en nuestro proyecto o combinarlas en una única clase abstracta base de modelo que se puede utilizar como base para todos nuestros otros modelos:
class BaseProjectModel(TimestampedModel, UUIDModel):
class Meta:
abstract = True
ordering = ['-created_at']
Utilizando este enfoque, podemos crear un nuevo modelo de la siguiente manera:
class Project(BaseProjectModel):
name = models.CharField(max_length=255)
description = models.TextField()
Esto creará un nuevo modelo llamado Project
que hereda tanto de TimestampedModel
como de UUIDModel
. Además, se agregarán automáticamente los campos created_at
y updated_at
al modelo, así como el campo id
.
Conclusión
En este artículo, hemos aprendido cómo crear un conjunto de modelos base que se pueden utilizar como base para todos nuestros otros modelos. También hemos aprendido cómo combinar estos modelos base en una única clase abstracta base de modelo que se puede utilizar como base para todos nuestros otros modelos.