在Django模型中使用枚举(Python 3.5)时的AttributeError
我试图在Django模型中使用Python3.5上的枚举。为什么我在尝试迁移时会遇到这种情况在Django模型中使用枚举(Python 3.5)时的AttributeError,python,django,enums,Python,Django,Enums,我试图在Django模型中使用Python3.5上的枚举。为什么我在尝试迁移时会遇到这种情况 field=models.CharField(choices=[('RE', 'Red'), ('GR', 'Green'), ('BL', 'Blue'), ('OR', 'Orange'), ('YE', 'Yellow'), ('PU', 'Purple')], default=users.models.COLOR('BL'), max_length=2), AttributeError: mod
field=models.CharField(choices=[('RE', 'Red'), ('GR', 'Green'), ('BL', 'Blue'), ('OR', 'Orange'), ('YE', 'Yellow'), ('PU', 'Purple')], default=users.models.COLOR('BL'), max_length=2),
AttributeError: module 'users.models' has no attribute 'COLOR'
-
由于在模型上使用了
CharField
,因此不能将枚举实例(default=COLOR.BLUE
)作为默认值传递。你应该传递一个字符串
更好的方法是定义一个知道如何清理枚举实例的自定义字段。如果您希望保持简单并坚持模型上的
CharField
,那么只需显式传递枚举值(default='BL'
) 由于您在模型上使用了CharField
,因此无法将枚举实例(default=COLOR.BLUE
)作为默认值传递。你应该传递一个字符串
更好的方法是定义一个知道如何清理枚举实例的自定义字段。如果您希望保持简单并坚持模型上的
CharField
,那么只需显式传递枚举值(default='BL'
) 3.4和3.5是不同的版本。@user2357112这是一个拼写错误,我正在使用Python 3.5,我想这会对您有所帮助。@Wencakisa我正在尝试使用枚举,而不是仅仅声明常量。错误被抛出到默认行,而不是选项行。无论如何,您为什么要尝试将枚举值指定为默认值?我认为Django甚至无法识别颜色.BLUE是什么,即使您正确指定了它。3.4和3.5是不同的版本。@user2357112这是一个拼写错误,我使用的是Python 3.5,我认为这会对您有所帮助。@Wencakisa我尝试使用枚举,而不是仅仅声明常量。错误被抛出到默认行,而不是选项行。无论如何,您为什么要尝试将枚举值指定为默认值?我认为Django甚至不会识别COLOR.BLUE是什么,即使您正确指定了它。
class User(AbstractBaseUser):
class COLOR(enum.Enum):
RED = 'RE'
GREEN = 'GR'
BLUE = 'BL'
ORANGE = 'OR'
YELLOW = 'YE'
PURPLE = 'PU'
//...
color = models.CharField(max_length=2, choices=((x.value, x.name.title()) for x in COLOR), default=COLOR.BLUE)