如何更改Django模型中的选项?

11 投票
2 回答
5163 浏览
提问于 2025-04-16 08:58

我有一个Django模型,它使用了choices这个属性。

COLOR_CHOICES = (
    ('R', 'Red'),
    ('B', 'Blue'),
)
class Toy(models.Model):
    color = models.CharField(max_length=1, choices=COLOR_CHOICES)

我的代码现在已经在生产环境中运行了,但我想添加一些新的选项。

COLOR_CHOICES = (
        ('R', 'Red'),
        ('B', 'Blue'),
        ('G', 'Green'),
 )

我该怎么做呢?Django会用数据库的约束来强制执行这些选项吗?我需要进行数据库迁移吗(我在用South)?还是说Django只是通过Python代码来限制选项,我只需要修改代码然后重启就可以了?

谢谢!

2 个回答

2

这个字段是 models.CharField,所以数据库会把它当作其他在 Django 中设置的 models.CharField 来处理 :)

不,它不会强制要求选择,你也不需要去修改你的数据库。

14

Django在数据库层面并不会强制使用选项,它只是用这些选项来展示界面和进行验证。如果你想让这些选项更“动态”,比如在不同的服务器上使用不同的选项,你可以在settings.py文件中定义它们:

from django.conf import settings

COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
        ('R', 'Red'),
        ('B', 'Blue'),
        ('G', 'Green'),
 ))

这样你就可以在settings.py中定义不同的选项了(不需要进行任何数据库迁移!)。

撰写回答