首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改枚举类字段时引发ValueError

更改枚举类字段时引发ValueError
EN

Stack Overflow用户
提问于 2019-01-31 10:35:36
回答 1查看 874关注 0票数 2

Enum类

代码语言:javascript
复制
class QuestionValidationTag(Enum):
    FREE_TEXT = "Free text"

模型

代码语言:javascript
复制
validation_tag = models.CharField(choices=[(tag.value, tag) for tag in QuestionValidationTag],
                                      null=True, max_length=200)

我已经更改了枚举FREE_TEXT

代码语言:javascript
复制
class QuestionValidationTag(Enum):
        FREE_TEXT = "make free text"

之后,我尝试运行我的应用程序并引发Value Error。此外,我还尝试运行python manage.py makemigrations (尽管据我理解,它并不需要)。但这也给了我错误。

引发ValueError("%r不是有效的%s“%(值,cls.名称)) ValueError:“空闲文本”不是有效的QuestionValidationTag

有什么建议吗?我如何通过更改枚举值来解决这个问题?

全迹

代码语言:javascript
复制
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\core\management\__init__.py", line 371, in execute_
from_command_line
    utility.execute()
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\core\management\__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\core\management\base.py", line 288, in run_from_arg
v
    self.execute(*args, **cmd_options)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\core\management\base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\core\management\commands\makemigrations.py", line 7
8, in handle
    loader = MigrationLoader(None, ignore_no_migrations=True)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__
    self.build_graph()
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\db\migrations\loader.py", line 201, in build_graph
    self.load_disk()
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\site-packages\django\db\migrations\loader.py", line 110, in load_disk
    migration_module = import_module("%s.%s" % (module_name, migration_name))
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "D:\Robiul_Alam_Backup\habijabi_\habijabi_src\habijabi_labo\habijabi_server\apps\chatbot\migrations\0001_ini
tial.py", line 9, in <module>
    class Migration(migrations.Migration):
  File "D:\Robiul_Alam_Backup\habijabi_\habijabi_src\habijabi_labo\habijabi_server\apps\chatbot\migrations\0001_ini
tial.py", line 150, in Migration
    ('validation_tag', models.CharField(choices=[('Free text', apps.chatbot.common.enums.QuestionValidationTag('Free text')
), ('Hobby', apps.chatbot.common.enums.QuestionValidationTag('Hobby')), ('Affirmative', apps.chatbot.common.enums.QuestionV
alidationTag('Affirmative')), ('Gender', apps.chatbot.common.enums.QuestionValidationTag('Gender')), ('Age', apps.chatbot.c
ommon.enums.QuestionValidationTag('Age')), ('Drink category', apps.chatbot.common.enums.QuestionValidationTag('Drink catego
ry')), ('Chu-hi brand', apps.chatbot.common.enums.QuestionValidationTag('Chu-hi brand')), ('First impression', apps.chatbot
.common.enums.QuestionValidationTag('First impression')), ('Taste', apps.chatbot.common.enums.QuestionValidationTag('Taste'
)), ('Greetings', apps.chatbot.common.enums.QuestionValidationTag('Greetings')), ('Drinking Scene', apps.chatbot.common.enu
ms.QuestionValidationTag('Drinking Scene')), ('Drinking Frequency', apps.chatbot.common.enums.QuestionValidationTag('Drinki
ng Frequency')), ('Recent Activities', apps.chatbot.common.enums.QuestionValidationTag('Recent Activities'))], max_length=2
00, null=True)),
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\enum.py", line 291, in __call__
    return cls.__new__(cls, value)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\enum.py", line 533, in __new__
    return cls._missing_(value)
  File "D:\ROBIUL~1\HABIJABI_~1\AI_DJA~1\AI_DJA~1\lib\enum.py", line 546, in _missing_
    raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 'Free text' is not a valid QuestionValidationTag
EN

回答 1

Stack Overflow用户

发布于 2019-01-31 11:00:52

出现此问题,是因为您已经删除或更改了Enum字段中的某些值(因此旧值在该枚举中不再有效),但历史迁移中的一个值仍然在Enum中使用该值,而该值无法工作。您必须跟踪该迁移(根据堆栈跟踪,它是0001_initial)并修复它,以便不再使用enum中的这个值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54458602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档