在序列化的Fixture中更改Django模型字段的显示选项
我有一个模型,它里面有一个叫做 status_type
的字段,这个字段使用了 choices
属性。当我使用 django 的 manage.py
里的 dumpdata
命令,并加上 --natural
这个选项(在 django 1.6 版本中),我得到的结果是 1
或 2
,这就是这个字段在数据库里的原始表示。
所以我想知道,如何才能在使用 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)