2011-11-10 114 views
22

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

我该如何做到这一点?

回答

79

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) 

然后在任何地方使用扩展值“男”或“女”现在有“男士”或“指数Femme”。

如果您想自己更改数值(即'M'和'F'),那么您需要更新数据库,所以如果您想将'M'更改为'H',那么您' d使用update

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

除非你有一个很好的理由,我想避免这样做 - 因为你需要确保你的改变GENDER_CHOICES和你update查询中同时进行。

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