我正在尝试将最新 Django 版本中的新 Enum 类型用于选择字段。具体来说,我试图将美国的各个州存储如下:
class States(models.TextChoices):
ALABAMA = 'AL', 'Alabama'
ALASKA = 'AK', 'Alaska'
.....
.....
WISCONSIN = 'WI', 'Wisconsin'
WYOMING = 'WY', 'Wyoming'
class PersonalInfo(models.Model):
state = models.CharField(max_length=2, choices=States.choices, default=States.ALABAMA)
按预期工作。现在,我还尝试使 max_length 变量也成为选择类的类属性,以通过执行以下操作使代码更加模块化:
class States(models.TextChoices):
ALABAMA = 'AL', 'Alabama'
ALASKA = 'AK', 'Alaska'
.....
.....
WISCONSIN = 'WI', 'Wisconsin'
WYOMING = 'WY', 'Wyoming'
MAX_LENGTH = 2
class PersonalInfo(models.Model):
state = models.CharField(max_length=States.MAX_LENGTH, choices=States.choices, default=States.ALABAMA)
这给了我一个错误如下:
如果 self.max_length 不是 None 并且 choice_max_length > self.max_length:
TypeError: '>' not supported between 'int' and 'States'
我知道 Django 还为整数提供了一个替代的 IntegerChoices,但是我如何同时使用文本和整数选择。