I have a model class of which I want two fields to be a choice fields, so to populate those choices I am using an enum as listed below
#models.py
class Trans
Example:
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
class YearInSchool(models.TextChoices):
FRESHMAN = 'FR', _('Freshman')
SOPHOMORE = 'SO', _('Sophomore')
JUNIOR = 'JR', _('Junior')
SENIOR = 'SR', _('Senior')
GRADUATE = 'GR', _('Graduate')
year_in_school = models.CharField(
max_length=2,
choices=YearInSchool.choices,
default=YearInSchool.FRESHMAN,
)
These work similar to enum from Python’s standard library, but with some modifications:
label
. The label
can be a lazy translatable string. Thus, in most cases, the member value will be a (value, label)
two-tuple. If a tuple is not provided, or the last item is not a (lazy) string, the label is automatically generated from the member name..label
property is added on values, to return the human-readable name.
A number of custom properties are added to the enumeration classes – .choices
, .labels
, .values
, and .names
– to make it easier to access lists of those separate parts of the enumeration. Use .choices
as a suitable value to pass to choices in a field definition.For more info, check the documentation