Skip to content

Instantly share code, notes, and snippets.

@ishtiaque2asad2
Forked from JackAtOmenApps/django_choices.txt
Created October 21, 2022 03:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ishtiaque2asad2/77437a39653da299fe1fba473a6a6454 to your computer and use it in GitHub Desktop.
Save ishtiaque2asad2/77437a39653da299fe1fba473a6a6454 to your computer and use it in GitHub Desktop.
Example of the new django 3.0 TextChoices enumeration types
from django.db import models
class Animal(models.Model):
class AnimalType(models.TextChoices):
ANTELOPE = 'A', 'Antelope'
BAT = 'B', 'Bat'
COUGAR = 'C', 'Cougar'
animal_type = models.CharField(max_length=1, choices=AnimalType.choices, default=AnimalType.ANTELOPE)
# In this example, the middle value on each line is what is saved to the database. So, `B` if I selected Bat. Since I am only using one character for each possible entry in this example, I set the `max_length` to 1.
>>> # Working with the AnimalType class itself outside of the Animal model
>>>
>>> Animal.AnimalType.values
['A', 'B', 'C']
>>>
>>> Animal.AnimalType.names
['ANTELOPE', 'BAT', 'COUGAR']
>>>
>>> Animal.AnimalType.labels
['Antelope', 'Bat', 'Cougar']
>>>
>>> Animal.AnimalType.choices
[('A', 'Antelope'), ('B', 'Bat'), ('C', 'Cougar')]
>>>
>>> dict(Animal.AnimalType.choices)
{'A': 'Antelope', 'B': 'Bat', 'C': 'Cougar'}
>>>
>>> # Working with AnimalType in a Model Instance
>>> my_animal = Animal()
>>> my_animal.save()
>>>
>>> my_animal_type = my_animal.animal_type
>>>
>>> # To get the value saved to the database:
>>> str(my_animal.animal_type)
'A'
>>>
>>> # To get the display name:
>>> # https://docs.djangoproject.com/en/3.0/ref/models/instances/#django.db.models.Model.get_FOO_display
>>> my_animal.get_animal_type_display()
'Antelope'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment