import datetime
from django.db import models
from django_fsm import FSMField, transition
class WorkFlowState(models.Model):
name = models.CharField(max_length=64, unique=True)
preceding = models.ForeignKey(
'self', on_delete=models.CASCADE,
blank=True, null=True)
# postAction = models.CharField(max_length=64, null=True, blank=True)
default_warn1 = models.DurationField(
blank=False, null=False, default=datetime.timedelta(hours=12))
default_warn2 = models.DurationField(
blank=False, null=False, default=datetime.timedelta(days=1))
default_duration = models.DurationField(
blank=False, null=False, default=datetime.timedelta(days=1))
def __str__(self):
return self.name
class Transition(models.Model):
name = models.CharField(max_length=64)
source_state = models.ForeignKey(WorkFlowState, on_delete=models.CASCADE, related_name='transitions_from')
target_state = models.ForeignKey(WorkFlowState, on_delete=models.CASCADE, related_name='transitions_to')
def __str__(self):
return self.name
class Task(models.Model):
name = models.CharField(max_length=100)
assigned_on = models.DateTimeField(auto_now=True)
created_on = models.DateTimeField(auto_now_add=True)
task_state = FSMField(models.ForeignKey(WorkFlowState, on_delete=models.PROTECT), protected=True)
def __str__(self):
return self.task_state
def perform_transition(self, transition_name):
try:
transition = Transition.objects.get(name=transition_name, source_state=self.task_state)
setattr(self, 'assigned_to', transition.target_state)
self.save()
return True
except Transition.DoesNotExist:
return False
I want to have a workflow state the that is a foriegn key to worlflowstate. first i create a transition model that can define states for fsm transition andi tried to define it as you see but it doent work. it store task status like a string
Django-fsm was designed over a decade ago, and its design is unable to accommodate many current requirements.
As the author of Django-fsm, I recommend transitioning to its successor, the viewflow.fsm package. For more information, please visit https://docs.viewflow.io/fsm/index.html.
This package separates model and FSM, and permits the use of any target field for the FSM state.