模型常量在数据迁移中不可用?

2024-09-28 05:18:16 发布

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

我想更改模型中的数据格式,并用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的


Tags: 数据djangofrom模型importnew定义models

热门问题