【发布时间】:2021-09-09 17:44:17
【问题描述】:
我正在尝试将最新 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:“int”和“States”的实例之间不支持“>”
我知道 Django 还为整数提供了一个替代的 IntegerChoices,但是我如何同时使用文本和整数选择。
【问题讨论】:
-
检查 my answer here 以了解将类常量添加到 Enum 的方法。
标签: python django enums modelchoicefield django-model-field