- March 28, 2012
- Not specified
- choices integer enumeration
- 1 (after 1 ratings)
The problem with supplying a Django model field with choices parameter is the way you check a value of that field in an object. You do nasty things like this:
if model_instance.choice_field == 1:
The problem of getting rid of hard-coded numbers is recognized over the internet, but I haven't found any short and understandable solution. Basically, we need a enumeration in python, that is ok to use as the Django
choices model field argument.
I've seen a couple of solutions of DjangoSnippets. Mine is shorter and easier because it only works for integer field choices.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
""" >>> states = Enum('OPEN', 'CLOSED') >>> states.OPEN 0 >>> states.get_choices() ((0, 'OPEN'), (1, 'CLOSED')) """ class DjangoEnum(object): def __init__(self, *string_list): self.__dict__.update([(string, number) for (number, string) in enumerate(string_list)]) def get_choices(self): return tuple(enumerate(self.__dict__.keys()))