用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值。需要结合default选项一起使用
    举例:
    方式一

    1. from django.db import models
    2. class Student(models.Model):
    3. FRESHMAN = 'FR'
    4. SOPHOMORE = 'SO'
    5. JUNIOR = 'JR'
    6. SENIOR = 'SR'
    7. GRADUATE = 'GR'
    8. YEAR_IN_SCHOOL_CHOICES = [
    9. (FRESHMAN, 'Freshman'),
    10. (SOPHOMORE, 'Sophomore'),
    11. (JUNIOR, 'Junior'),
    12. (SENIOR, 'Senior'),
    13. (GRADUATE, 'Graduate'),
    14. ]
    15. year_in_school = models.CharField(max_length=2,choices=YEAR_IN_SCHOOL_CHOICES,
    16. default=FRESHMAN,)
    17. def is_upperclass(self):
    18. return self.year_in_school in {self.JUNIOR, self.SENIOR}

    每次choices更改顺序时都会创建一个新迁移。
    方式二

    1. from django.utils.translation import gettext_lazy as _
    2. class Student(models.Model):
    3. class YearInSchool(models.TextChoices):
    4. FRESHMAN = 'FR', _('Freshman')
    5. SOPHOMORE = 'SO', _('Sophomore')
    6. JUNIOR = 'JR', _('Junior')
    7. SENIOR = 'SR', _('Senior')
    8. GRADUATE = 'GR', _('Graduate')
    9. year_in_school = models.CharField(
    10. max_length=2,
    11. choices=YearInSchool.choices,
    12. default=YearInSchool.FRESHMAN,
    13. )
    14. def is_upperclass(self):
    15. return self.year_in_school in {
    16. self.YearInSchool.JUNIOR,
    17. self.YearInSchool.SENIOR,
    18. }

    以内部类的方式定义choices字段选项值,该内部类需继承model.Choices、model.IntegerChoices或者IntegerChoices