Login

Django enumeration for model field choices

Author:
martinthenext
Posted:
March 28, 2012
Language:
Python
Version:
Not specified
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. Browser-native date input field by kytta 1 month, 1 week ago
  2. Generate and render HTML Table by LLyaudet 1 month, 2 weeks ago
  3. My firs Snippets by GutemaG 1 month, 2 weeks ago
  4. FileField having auto upload_to path by junaidmgithub 2 months, 3 weeks ago
  5. LazyPrimaryKeyRelatedField by LLyaudet 3 months ago

Comments

Please login first before commenting.