Django: Best way to implement "status" field in modules
django, python
Solution
Maybe this question helps you: Set Django IntegerField by choices=… name. I quote from the accepted answer (with adjustments ;)): Put this into your class (`STATUS_CHOICES` will be the list that is handed to the `choices` option of the field):
PENDING = 0
DONE = 1
STATUS_CHOICES = (
(PENDING, 'Pending'),
(DONE, 'Done'),
)
Then you can do `order.status = Order.DONE`.
Note that you don't have to implement an own method to retrieve the (readable) value, Django provides the method `get_status_display` itself.
Problem
I have a field in my module that is used to hold the status of the object. So far I have used: ``` ORDER_STATUS = ((0, 'Started'), (1, 'Done'), (2, 'Error')) status = models.SmallIntegerField(choices=ORDER_STATUS) ``` Its easy to convert one way: ``` def status_str(self): return ORDER_STATUS[self.status][1] ``` The problem is when updating. I find myself having code like this: ``` order.status = 2 # Error Status ``` Which is quite awful and gets really hard to synchronize. I guess a solution would be something similar to C's enum{}. Or perhaps there is a whole different way to tackle this problem ? Thanks