Django模型中的ChoiceField

时间:2011-11-10 10:09:17

标签: django

假设我的django模型中有choicefield,它包含多个选项。现在将来,如果我用其他名称(选项)更改现有选项(选项),那么具有该选择(选项)的模型中的现有记录是否也会改变?或者在管理页面中,我需要手动设置新选项吗?

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:96)

ChoiceFields作为值存储在数据库中,所以以the documentation为例:

class Foo(models.Model):
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

数据库将存储'M'和'F',所以如果你有一天决定重命名这样的*:

class Foo(models.Model):
    GENDER_CHOICES = (
        ('M', 'Homme'),
        ('F', 'Femme'),
    )
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

然后在任何地方使用扩展值“男性”或“女性”现在都会有“男性”或“女性”。

如果您想自己更改值(即“M”和“F”),那么您将需要更新数据库,因此如果您想将“M”更改为“H”,那么您需要使用update

Foo.objects.filter(gender = 'M').update(gender = 'H')

除非您有充分的理由,否则我会避免这样做 - 因为您需要确保对GENDER_CHOICESupdate查询的更改同时完成。

*是的,我知道这是一种愚蠢的翻译方式!