Login

Django enumeration for model field choices

Author:
martinthenext
Posted:
March 28, 2012
Language:
Python
Version:
Not specified
Tags:
choices integer enumeration
Score:
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())) 

More like this

  1. Enumeration field by nail.xx 6 years, 9 months ago
  2. More readable Enumeration class for Django choices by achimnol 5 years, 9 months ago
  3. Model Choices Helper by pmclanahan 5 years, 3 months ago
  4. Handling choices the right way by mallipeddi 7 years, 5 months ago
  5. CSV to JSON Fixture by briangershon 5 years, 8 months ago

Comments

Please login first before commenting.