我想更改模型中的数据格式,并用int选项替换char字段。旧字段称为objective
,新字段称为objective_new
以下是模型定义(摘录):
from django.db import models
from django.utils.translation import gettext_lazy as _
class Timer(models.Model):
# ...
OBJECTIVE_HOSTILE = 1
OBJECTIVE_FRIENDLY = 2
OBJECTIVE_NEUTRAL = 3
OBJECTIVE_UNDEFINED = 4
OBJECTIVE_CHOICES = [
(OBJECTIVE_HOSTILE, _('Hostile')),
(OBJECTIVE_FRIENDLY, _('Friendly')),
(OBJECTIVE_NEUTRAL, _('Neutral')),
(OBJECTIVE_UNDEFINED, _('Undefined')),
]
objective_new = models.SmallIntegerField(
choices=OBJECTIVE_CHOICES,
default=OBJECTIVE_UNDEFINED,
verbose_name='objective',
)
objective = models.CharField(
max_length=254,
default="",
blank=True,
help_text='This field is no longer in use',
)
# ...
要将现有数据转换为新格式,我希望使用数据迁移,将文本从旧字段映射到新的选项字段
这里是我的问题:我在数据迁移中得到的模型类不包含任何常量,例如我需要进行映射的OBJECTIVE_CHOICES
这是我的数据迁移代码(摘录):
def migrate_forward(apps, schema_editor):
Timer = apps.get_model('timerboard', 'Timer')
objective_map = {x[1]: x[0] for x in Timer.OBJECTIVE_CHOICES}
# ...
我得到以下错误:
AttributeError: type object 'Timer' has no attribute 'OBJECTIVE_CHOICES'
当然,我可以将choices定义复制到我的数据迁移脚本中,但我不想在两个地方重新定义它。我是否遗漏了某些内容,或者像OBJECTIVE_CHOICES
这样的类常量在数据迁移中通常不可用
这是针对Django 2.2的
目前没有回答
相关问题 更多 >
编程相关推荐