Meta Choice with simple flow and rules
from django.db import models
from django_choices_flow import Choices
from django_choices_flow.models import FlowIntegerField
class MyChoices(Choices):
NEW = 1, 'New content' # 'New content' is the display text
WAIT = 2, 'Wait'
CANCELED = -1, 'Canceled'
ERROR = -2, 'Error'
INVOICED = 3, 'Invoiced'
# set transaction rules
NEW_RULES = [NEW, INVOICED, CANCELED, ERROR]
WAIT_RULES = [CANCELED, ERROR, INVOICED]
INVOICED_RULES = [CANCELED]
class Invoces(models.Model):
"""
To use only choices
"""
number = models.IntegerField()
status = models.IntegerField(choices=MyChoices, default=MyChoices.NEW)
def __unicode__(self):
return self.number
class FlowInvoice(models.Model):
"""
To validate flow in choices
"""
number = models.IntegerField()
status = FlowIntegerField(choices=MyChoices, default=MyChoices.NEW)
def __unicode__(self):
return self.number
>>> flow = FlowInvoice.objects.create(number=1234)
>>> flow.status
1
>>> flow.status = MyChoices.INVOICED
>>> flow.full_clean()
>>> flow.save()
>>> flow.status
3
>>> flow.status = MyChoices.WAIT
>>> flow.full_clean()
ValidationError: {'status': [u'Invalid choice: Wait']}
# download code
git clone [email protected]:valdergallo/django-choices-flow.git
# install developer packages
make
# check coverage
make coverage
# test project
make test
#clean extra content
make clean
#send package
make send_package
#test py2 and py3
tox
South: Support migrations
Python: python 2.7 and python 3.3
Tested in Django:
1.2.x;
1.3.x;
1.4.x;
1.5.x;
1.6.x;
1.7.x;
1.8.x;
1.9.x;
1.10.x;