Как мне изменить выбор в модели Django? - PullRequest
7 голосов
/ 23 декабря 2010

У меня есть модель 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 ограничения базы данных для принудительного выбора? Нужно ли выполнять миграцию базы данных (я использую Юг )? Или Django просто навязывает ограничение выбора в коде Python, и все, что мне нужно сделать, это изменить код и перезапустить?

Спасибо!

Ответы [ 2 ]

11 голосов
/ 23 декабря 2010

Django не навязывает выбор на уровне базы данных, он использует их только для представления виджетов и проверки. Если вы хотите, чтобы они были немного более динамичными, например, чтобы они были разными на разных серверах, вы можете определить их через settings.py:

from django.conf import settings

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

Тогда вы можете определить различные варианты в вашем settings.py (нет необходимости в переносе базы данных!).

1 голос
/ 23 декабря 2010

Поле равно models.CharField, поэтому база данных будет обрабатывать его как любую другую models.CharField, настроенную в django :)

Нет, это не навязывает выбор / вам не нужно трогать вашу БД.

...