我试图在最新的Django版本中为choice字段使用新的枚举类型。具体而言,我试图将美国各州存储如下:
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变量作为choice类的class属性,通过执行以下操作使代码更加模块化:
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)
这给了我一个错误,如下所示:
if self.max_length is not None and choice_max_length > self.max_length:
TypeError: '>' not supported between instances of 'int' and 'States'
我知道Django还为integer提供了一个可选的IntegerChoices,但我如何同时使用文本和整数选项呢
TextChoices
必须包含字符串值,它们的工作方式是枚举您在类中定义的内容。所以你有一个混合的类型,它不起作用,因为它试图把2
作为选项之一,因为它是选项类的一部分你能做的就是把选择定义为一个常数,有点像这样
为了确认,这里是来自django的choice类
相关问题 更多 >
编程相关推荐