在序列化的Fixture中更改Django模型字段的显示选项

0 投票
1 回答
685 浏览
提问于 2025-04-18 10:41

我有一个模型,它里面有一个叫做 status_type 的字段,这个字段使用了 choices 属性。当我使用 django 的 manage.py 里的 dumpdata 命令,并加上 --natural 这个选项(在 django 1.6 版本中),我得到的结果是 12,这就是这个字段在数据库里的原始表示。

所以我想知道,如何才能在使用 dumpdata --natural 时,得到 get_<field>_display 的版本,而不是原始的数据库值呢?

当前输出

{
  "fields": {
    "name": "todo",
    "type": 1
  },
  "model": "status.status",
  "pk": 1
}

期望输出

{
  "fields": {
    "name": "todo",
    "type": "open"
  },
  "model": "status.status",
  "pk": 1
}

背景信息

# status.models.py

class StatusManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get(name=name)

    ...


class Status(models.Model):
    """
    Django model representing a processing state.
    """
    objects = StatusManager()

    name = models.CharField(max_length=20, unique=True)
    OPEN = 1
    CLOSED = 2
    DEFAULT = OPEN
    TYPES = (
        (OPEN, "open"),
        (CLOSED, "closed"),
    )
    status_type = models.IntegerField(default=DEFAULT, max_length=1, choices=TYPES)

    ...

    class Meta:
        verbose_name_plural = "Status"

    def __str__(self):
        return self.name

    def natural_key(self):
        return [self.name]

    ...

1 个回答

0

一个选择是使用 models.CharField。

DEFAULT = "open"
TYPES = (
    ("open", "open"),
    ("closed", "closed"),
)
status_type = models.CharField(default=DEFAULT, max_length=20, choices=TYPES)

撰写回答