Login

Handling choices the right way

Author:
mallipeddi
Posted:
November 2, 2007
Language:
Python
Version:
.96
Score:
2 (after 2 ratings)

This solves the problem with choices described here

Define your choices like this (in models.py):

statuses = MyChoices(BIDDING_STARTED=10, BIDDING_ENDED=20)

And then:

status = models.IntegerField(
                   default=statuses.BIDDING_STARTED,
                   choices=statuses.get_choices()
                )
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MyChoices:
   def __init__(self, **entries):
       self.__dict__.update(entries)
       self.choices = [ ]
       for val in entries.values():
           for key in entries.keys():
               if entries[key] == val:
                   self.choices.append((val, key))

      def get_choices(self):
          return self.choices

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

tomzee (on December 29, 2007):

Here is a similar solution which allows you to pass dictionaries to the constructor, and inserts the key/value pairs into the choice-list in the same manner they are in the dictionaries.

class ChoiceMap:
    def __init__(self, *args, **entries):
        self.choices = []
        def add_choices(d):
            self.__dict__.update(arg)
            for key, val in d.iteritems():
                self.choices.append((key, val))
        for arg in args:
            if isinstance(arg, dict):
                add_choices(arg)
        add_choices(entries)
    def get_choices(self):
        return self.choices

#

Please login first before commenting.