10

我有一个使用choices 属性的 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 代码中强制执行选择限制,而我所要做的就是更改代码并重新启动?

谢谢!

4

2 回答 2

13

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

from django.conf import settings

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

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

于 2010-12-23T19:45:26.917 回答
1

该字段是models.CharField这样数据库将像models.CharField在 django 中设置的任何其他设置一样对待它:)

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

于 2010-12-23T20:07:38.603 回答