下面是我的代码a.py:
from django.db import models
from django_fsm import transition, FSMIntegerField
from django_fsm import FSMField, transition
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
import django
django.setup()
from django.core.management import call_command
class Order(models.Model):
STATUS_STARTED = 0
STATUS_SLOW =1
STATUS_FAST=2
STATUS_JUMP=3
STATUS_CHOICES = (
(STATUS_STARTED, 'STARTED'),
(STATUS_SLOW,'SLOW')
(STATUS_FAST,'FAST')
(STATUS_JUMP,'JUMP')
)
product = models.CharField(max_length=200)
status = FSMIntegerField(choices=STATUS_CHOICES, default=STATUS_STARTED, protected=True)
一个人从一个点开始,他要么快要么慢。
@transition(field=status, source=[STATUS_STARTED], target=STATUS_FAST)
def fast(self):
print("person run fast")
@transition(field=status, source=[STATUS_STARTED], target=STATUS_SLOW)
def slow(self):
print("person run slow ")
处于 FAST 状态的人可以切换到 SLOW 状态并可以 JUMP:
@transition(field=status, source=[STATUS_FAST], target=STATUS_SLOW)
def switch(self)
print("state switched")
@transition(field=status, source=[STATUS_FAST, STATUS_SLOW], target=STATUS_JUMP)
def jump(self)
print("person jumpped")
但我有条件从慢速状态开始的人不能跳跃。
从 FAST 状态,他可以 SLOW & JUMP,但不能直接从 STARTED--> SLOW--> JUMP 是可能的。
但是当我运行上面的代码时:
>>person = Order() #input
>>person.slow() # Input
>> person run slow # output
>>person.jump() # Input
>>person jumpped # output but expected transition error.
我发现这是因为,FSM 将单独保持最后一个状态,并且按照 jump(),从 SLOW 到 JUMP 被执行..
任何在@transition 函数之后为 FAST 状态定义变量(让 SAY 'X')并设置为 X=Y 的可能性,以表明人已达到此状态。这样当他进入 JUMP 状态时,可以验证变量是否 X==Y ?如果是这样,如何定义它。