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

Ada*_*dam 8 python migration django django-models django-south

我有一个使用该choices 属性的Django模型.

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

我的代码正在生产中,现在我想添加其他选择.

COLOR_CHOICES = (
        ('R', 'Red'),
        ('B', 'Blue'),
        ('G', 'Green'),
 )
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?Django是否使用数据库约束来强制执行选择?我是否需要进行数据库迁移(我正在使用South)?或者Django只是强制执行Python代码中的选择限制,我所要做的就是更改代码并重新启动?

谢谢!

Ber*_*ant 11

Django不强制在数据库级别上进行选择,它只使用它们来呈现小部件和验证.如果你想要它们更"动态",例如在不同的服务器上有不同的,你可以通过settings.py以下方式定义它们:

from django.conf import settings

COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
        ('R', 'Red'),
        ('B', 'Blue'),
        ('G', 'Green'),
 ))
Run Code Online (Sandbox Code Playgroud)

然后,您可以在自己中定义不同的选择settings.py(无需任何数据库迁移!).

  • @Ferguzz`MyModel.objects.filter(color ="R").update(color ="G")` (2认同)