假设我的django模型中有choicefield,它包含多个选项。现在将来,如果我用其他名称(选项)更改现有选项(选项),那么具有该选择(选项)的模型中的现有记录是否也会改变?或者在管理页面中,我需要手动设置新选项吗?
我怎样才能做到这一点?
答案 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_CHOICES
和update
查询的更改同时完成。
*是的,我知道这是一种愚蠢的翻译方式!