Что хранится в базе данных для выпадающего поля одиночного выбора? (Django)

У меня есть выпадающее поле одиночного выбора "Month" с 3 вариантами "January", "February" и "March", как показано ниже:

enter image description here

Это код для выпадающего поля одиночного выбора "Месяц" в классе "Дата" ниже:

# "store/models.py"

from django.db import models

class Date(models.Model):
    class Months(models.TextChoices):
        JANUARY  = 'JAN', 'January'
        FEBRUARY = 'FEB', 'February'
        MARCH    = 'MAR', 'March'
    
    month = models.CharField(max_length=100, choices=Months.choices)

А это код старой версии для выпадающего поля одиночного выбора "Month" в классе "Date" , который эквивалентен приведенному выше коду:

# "store/models.py"

from django.db import models

class Date(models.Model):
    JANUARY  = 'JAN'
    FEBRUARY = 'FEB'
    MARCH    = 'MAR'

    MANTHS = [
        (JANUARY,  'January'),
        (FEBRUARY, 'February'),
        (MARCH,    'March')
    ]

    month = models.CharField(max_length=100, choices=MANTHS)

Теперь, если я выберу "February" и нажму "SAVE", что будет сохранено в базе данных? "ФЕВРАЛЬ"? "FEB"? или "February"?

enter image description here

"FEB" хранится в базе данных. На самом деле, как показано ниже, "FEBRUARY" - это просто переменная, "FEB" - это значение, хранящееся в базе данных, а "February" - это опция, отображаемая в опция, отображаемая в выпадающем поле одиночного выбора "Month" на странице "Add date" в Django Admin(GUI):

# "store/models.py"

from django.db import models

class Date(models.Model):
    class Months(models.TextChoices):
     # |Variable|  | DB | | Option |
        JANUARY  = 'JAN', 'January'
        FEBRUARY = 'FEB', 'February'
        MARCH    = 'MAR', 'March'
    
    month = models.CharField(max_length=100, choices=Months.choices)

Для старой версии код ниже:

# "store/models.py"

from django.db import models

class Date(models.Model):
 # |Variable|  | DB | 
    JANUARY  = 'JAN'
    FEBRUARY = 'FEB'
    MARCH    = 'MAR'

    MANTHS = [
      # |Variable| | Option |
        (JANUARY,  'January'),
        (FEBRUARY, 'February'),
        (MARCH,    'March')
    ]

    month = models.CharField(max_length=100, choices=MANTHS)

Как показано ниже, "FEB" хранится в базе данных (SQLite)

enter image description here

Кроме того, добавив следующий код в класс "Date" :

def __str__(self):
    return self.month

Вы можете проверить, что хранится в базе данных на странице "Выберите дату для изменения" в Django Admin(GUI), как показано ниже:

enter image description here

Ниже представлен полный код:

# "store/models.py"

from django.db import models

class Date(models.Model):
    class Months(models.TextChoices):
     # |Variable|  | DB | | Option |
        JANUARY  = 'JAN', 'January'
        FEBRUARY = 'FEB', 'February'
        MARCH    = 'MAR', 'March'
    
    month = models.CharField(max_length=100, choices=Months.choices)

    def __str__(self):
        return self.month

А вот полный код для старой версии ниже:

# "store/models.py"

from django.db import models

class Date(models.Model):
 # |Variable|  | DB | 
    JANUARY  = 'JAN'
    FEBRUARY = 'FEB'
    MARCH    = 'MAR'

    MANTHS = [
      # |Variable| | Option |
        (JANUARY,  'January'),
        (FEBRUARY, 'February'),
        (MARCH,    'March')
    ]

    month = models.CharField(max_length=100, choices=MANTHS)

    def __str__(self):
        return self.month
Вернуться на верх