Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django模型中使用枚举(Python 3.5)时的AttributeError_Python_Django_Enums - Fatal编程技术网

在Django模型中使用枚举(Python 3.5)时的AttributeError

在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

我试图在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: 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)