Django模型中的ChoiceField

Asi*_*sif 38 django django-models

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

我怎样才能做到这一点?

Dom*_*ger 103

ChoiceFields作为值存储在数据库中,因此请从文档中获取示例:

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

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

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

然后,在任何使用扩展值"男性"或"女性"的地方,现在都会有"男性"或"女性".

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

Foo.objects.filter(gender = 'M').update(gender = 'H')
Run Code Online (Sandbox Code Playgroud)

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

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