更改枚举类字段时引发值错误

2024-06-16 09:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

枚举类

class QuestionValidationTag(Enum):
    FREE_TEXT = "Free text"

型号

^{pr2}$

我已经更改了枚举FREE_TEXT

class QuestionValidationTag(Enum):
        FREE_TEXT = "make free text"

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

raise ValueError("%r is not a valid %s" % (value, cls.name))

ValueError: 'Free text' is not a valid QuestionValidationTag

对于如何通过更改枚举值来解决此问题,是否有任何建议?

makemigration的完整跟踪

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

Tags: appsinpyliblinesitecommonai
1条回答
网友
1楼 · 发布于 2024-06-16 09:14:34

发生此问题的原因是您删除或更改了Enum字段中的某个值(因此旧值对该枚举不再有效),但其中一个历史迁移仍然在Enum内使用该值,这将无法工作。您必须跟踪该迁移(根据stacktrace,它是0001_initial)并修复它,以便不再使用enum中的这个值。在

相关问题 更多 >