Al definir las opciones de CharField
o TextField
en un modelo de Django, a menudo hemos utilizado listas de tuplas.
Sin embargo, al utilizar TextChoices
, introducido en Django 3.0, podemos escribir un código mucho más limpio y significativo.
1. Definición de opciones de modelo: método tradicional
La forma en que solemos escribir es utilizando el método de listas de tuplas como se muestra a continuación.
# models.py
STATUS_CHOICES = [
('DF', 'Borrador'),
('PB', 'Publicado'),
('AR', 'Archivado'),
]
class Post(models.Model):
status = models.CharField(max_length=2, choices=STATUS_CHOICES, default='DF')
Desventajas del método tradicional:
- Dificultad para entender el significado del código (es difícil saber de inmediato qué es 'DF'
)
- Aunque se utiliza get_FIELD_display()
, no está estructurado como un Enum, lo que complica el mantenimiento
- Es necesario el uso de código duro en comparaciones de condiciones
if post.status == 'DF':
...
2. Mejora con el método TextChoices
Al observar el código fuente, el principio es simple, por lo que recomiendo a quienes tengan curiosidad sobre su funcionamiento que revisen el código fuente de Django.
Aquí simplemente explicaré el método.
# dentro de models.py
from django.db import models
class PostStatus(models.TextChoices):
DRAFT = 'DF', 'Borrador'
PUBLISHED = 'PB', 'Publicado'
ARCHIVED = 'AR', 'Archivado'
class Post(models.Model):
status = models.CharField(max_length=2, choices=PostStatus.choices, default=PostStatus.DRAFT)
Ventajas de este método:
- La posibilidad de manejar condiciones con nombres significativos como PostStatus.DRAFT
- Soporte completo para get_status_display()
- Se puede tratar como un objeto, lo que favorece la autocompletación en IDE y análisis estáticos
if post.status == PostStatus.DRAFT:
...
- Reutilización: si varios modelos necesitan compartir las mismas opciones, se pueden definir en un archivo externo (
choices.py
)
En realidad, la reutilización es la mayor ventaja de usar esta clase TextChoices
.
Si las opciones son comúnmente utilizadas en varias aplicaciones de Django, se pueden colocar en commons/choices.py
, permitiendo su uso en cualquier aplicación.
3. Conclusión
Las TextChoices
de Django son una excelente herramienta que ayuda a tratar las opciones de modelo de manera más intuitiva y robusta.
¡Sal de la antigua forma de listas de tuplas y mejora la calidad de tu código!
Add a New Comment