This is based off of django-statemachine with the states being stored as a Model