I have a Django model that uses the choices
attribute.
COLOR_CHOICES = (
('R', 'Red'),
('B', 'Blue'),
)
class Toy(models.Model):
color = models.CharField(max_length=1, choices=COLOR_CHOICES)
My code is in production and now I'd like to add additional choices.
COLOR_CHOICES = (
('R', 'Red'),
('B', 'Blue'),
('G', 'Green'),
)
How do I go about doing this? Does Django use Database constraints to enforce choices? Do I need to do a Database migration (I'm using South)? Or does Django just enforce the choices restriction in Python code and all I have to do is change the code and restart?
Thanks!
Django doesn't enforce choices on a database level, it only uses them for the presentation of the widgets and in validation. If you want them a bit more 'dynamic', for example to have different ones on different servers you could define them via settings.py
:
from django.conf import settings
COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
('R', 'Red'),
('B', 'Blue'),
('G', 'Green'),
))
Then you could define different choices in your settings.py
(no need for any database migration!).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With