用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值。需要结合default选项一起使用
举例:
方式一
from django.db import modelsclass Student(models.Model):FRESHMAN = 'FR'SOPHOMORE = 'SO'JUNIOR = 'JR'SENIOR = 'SR'GRADUATE = 'GR'YEAR_IN_SCHOOL_CHOICES = [(FRESHMAN, 'Freshman'),(SOPHOMORE, 'Sophomore'),(JUNIOR, 'Junior'),(SENIOR, 'Senior'),(GRADUATE, 'Graduate'),]year_in_school = models.CharField(max_length=2,choices=YEAR_IN_SCHOOL_CHOICES,default=FRESHMAN,)def is_upperclass(self):return self.year_in_school in {self.JUNIOR, self.SENIOR}
每次choices更改顺序时都会创建一个新迁移。
方式二
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,)def is_upperclass(self):return self.year_in_school in {self.YearInSchool.JUNIOR,self.YearInSchool.SENIOR,}
以内部类的方式定义choices字段选项值,该内部类需继承model.Choices、model.IntegerChoices或者IntegerChoices
