paint-brush
Uso de Enum como opción de campo modelo en Djangopor@melvinkcx2
82,505 lecturas
82,505 lecturas

Uso de Enum como opción de campo modelo en Django

por Melvin Koh2018/03/29
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

<em>Publicado originalmente en</em> <a href="http://www.melvinkoh.me/#/post/1b66029e-cd20-4e11-9084-9a20e6c90bdb" target="_blank"><em>melvinkoh.me</em></a> <em>.</em>

Company Mentioned

Mention Thumbnail
featured image - Uso de Enum como opción de campo modelo en Django
Melvin Koh HackerNoon profile picture

Publicado originalmente en melvinkoh.me .

En la documentación oficial de Django, brindan 2 ejemplos sobre cómo usar opciones predefinidas como opciones de un campo en particular.

Ejemplos de la documentación oficial de Django

El primer ejemplo define las opciones como una Tupla de Tupla, siendo cada opción el valor de la tupla exterior.

El primer elemento de cada tupla interna es el valor que se establecerá en el modelo, y el segundo elemento es su representación de cadena.

 # Example from Django official documentationYEAR_IN_SCHOOL_CHOICES = ( ('FR', 'Freshman'), ('SO', 'Sophomore'), ('JR', 'Junior'), ('SR', 'Senior'),)

En su segundo ejemplo, nos sugieren que definamos las opciones como constantes en nuestra clase modelo.

 # Example from Django official documentationfrom django.db import models class Student(models.Model): # Constants in Model class FRESHMAN = 'FR' SOPHOMORE = 'SO' JUNIOR = 'JR' SENIOR = 'SR' YEAR_IN_SCHOOL_CHOICES = ( (FRESHMAN, 'Freshman'), (SOPHOMORE, 'Sophomore'), (JUNIOR, 'Junior'), (SENIOR, 'Senior'), ) year_in_school = models.CharField( max_length=2, choices=YEAR_IN_SCHOOL_CHOICES, default=FRESHMAN, )

Mi método preferido: uso de la enumeración

Hay una tercera opción que es mi forma preferida de definir opciones para un campo en el modelo: enumeración (o enumeración)

¿Qué es la enumeración?

La enumeración es un conjunto de nombres simbólicos vinculados a valores constantes únicos. Definiremos nuestros Enums como una subclase de enum en la biblioteca estándar de Python. enumeración en la documentación oficial de Python

Definición de enumeraciones

En esta publicación, lo guiaré a través del uso de Enum como opciones de campo con un ejemplo simple. Supongamos que hay un campo para identificar el idioma de un libro, las opciones de idioma dadas son inglés, alemán, español y chino.

Primero, definimos una clase para todas las opciones:

 from enum import Enum class LanguageChoice(Enum): # A subclass of Enum DE = "German" EN = "English" CN = "Chinese" ES = "Spanish"

A continuación, definimos nuestro modelo:

 from django.db import models class Book(models.Model): title = models.CharField(max_length=255) language = models.CharField( max_length=5, choices=[(tag, tag.value) for tag in LanguageChoice] # Choices is a list of Tuple )

En nuestro modelo de libro , las opciones del campo de idioma son una lista de tuplas. Para simplificar, usamos la comprensión de listas para generar nuestra lista de opciones.

Para cada tupla de opciones, el primer elemento es el valor que se almacena en el modelo, mientras que el segundo es su representación legible por humanos.

Uso de enumeración

Ahora que hemos definido nuestro Enums y modelo, ¿cómo lo usaríamos?

Digamos que queremos agregar una entrada de libro con el idioma 'DE':

 # import your Models and Enums b = Book(title='Deutsch Für Ausländer', language=LanguageChoice.DE)b.save()

Tenga en cuenta que la forma en que proporcionamos el valor para el idioma del parámetro depende del primer elemento que definimos en las tuplas de la lista de opciones. Usamos (etiqueta, etiqueta.valor) cuya etiqueta es de tipo Enum.

¿Por qué Enum?

Puede preguntar: "¿Por qué usar Enum en lugar de los ejemplos dados en la documentación oficial de Django?"

  1. Para distinguirse de cualquier otro valor dentro de conjuntos de valores. Por ejemplo, podríamos simplemente definir el número entero 1–7 para los días de una semana, ¿qué tal si tenemos otro conjunto de valores cuya representación incluye el subconjunto de 1–7?
  2. Repositorio central de valores predefinidos, la enumeración se puede usar en todo su programa, no solo en sus modelos.

¿Cuándo usar Enum?

De acuerdo con PEP 435 , una enumeración es útil para definir un conjunto inmutable y relacionado de valores constantes que pueden o no tener un significado semántico. Los ejemplos clásicos son los días de la semana (de domingo a sábado) y las calificaciones de las evaluaciones escolares ('A' a 'D' y 'F'). Otros ejemplos incluyen valores de estado de error y estados dentro de un proceso definido.

Tu aplauso definitivamente me llevará más lejos. Dame un aplauso si te gusta este post.