2010-12-23 9 views
7

Mam model Django, który używa choicesattribute.Jak zmienić opcje w modelu Django?

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

Mój kod jest w produkcji, a teraz chciałbym dodać dodatkowe opcje.

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

Jak mam to zrobić? Czy Django używa ograniczeń bazy danych do wymuszania wyborów? Czy muszę wykonać migrację bazy danych (używam South)? Czy też Django wymusza ograniczenie wyboru w kodzie Pythona i wszystko co muszę zrobić to zmienić kod i zrestartować?

Dzięki!

Odpowiedz

11

Django nie wymusza wyborów na poziomie bazy danych, wykorzystuje je tylko do prezentacji widżetów i sprawdzania poprawności. Jeśli chcesz je nieco bardziej „dynamiczne”, na przykład mieć różne te na różnych serwerach można je zdefiniować poprzez settings.py:

from django.conf import settings 

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

Następnie można określić różne opcje w settings.py (bez potrzeby jakiejkolwiek migracji bazy danych !).

+0

To świetny pomysł. Ale mówisz, że jak to jest, nie ma potrzeby migracji DB. Po prostu muszę zmienić kod i uruchomić ponownie? – Adam

+0

tak ... a poza tym nie powinno to być zbyt wielkim wyzwaniem, prawda? –

+0

Nic wielkiego. Zadziałało! Dzięki! – Adam

1

Pole jest models.CharField więc baza danych będzie traktować go jak każdy inny models.CharField ustanowionego w Django :)

Nie, to nie wymusza wybory/nie trzeba dotknąć DB.

Powiązane problemy