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

时间:2010-12-23 19:29:00

标签: python django django-models migration django-south

我有一个使用choices attribute

的Django模型
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 个答案:

答案 0 :(得分:11)

Django不会在数据库级别强制执行选择,它只会将它们用于窗口小部件的呈现和验证。如果您希望它们更“动态”,例如在不同服务器上拥有不同的服务器,您可以通过settings.py定义它们:

from django.conf import settings

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

然后你可以在settings.py中定义不同的选择(不需要任何数据库迁移!)。

答案 1 :(得分:1)

该字段为models.CharField,因此数据库会像在django中设置的任何其他models.CharField一样对待它。

不,它不会强制执行选择/您不需要触摸数据库。