- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
from datetime import datetime
from django.db import models
from django_fsm import FSMField, transition
class Network(models.Model):
name = models.CharField(max_length=100, unique=True)
prefix = models.CharField(max_length=20, default='')
country = models.CharField(max_length=50, default='')
client_wsdl = models.TextField(blank=True, default='')
class Meta:
db_table = 'network'
def __unicode__(self):
return u'{0}'.format(self.name)
class SmsMessage(models.Model):
#Define State Machine
received, started, failed, submitted, completed = "received", "started", "failed", "submitted", "completed"
STATE_CHOICES = (
(received, received),
(started, started),
(failed, failed),
(submitted, submitted),
(completed, completed),
)
message_id = models.CharField(max_length=50)
sender_id = models.CharField(max_length=50, default='')
msisdn = models.CharField(max_length=50)
message = models.CharField(max_length=200)
priority = models.CharField(max_length=50)
status = models.CharField(max_length=20, default='')
state = FSMField(default=received, choices=STATE_CHOICES, protected=True)
callback = models.CharField(max_length=200, default='')
network = models.ForeignKey(Network, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'sms_message'
def __unicode__(self):
return self.message_id
@transition(field=state, source='received', target=started)
def started(self):
'''
Change message request to started state.
'''
return
@transition(field=state, source='started', target=failed)
def failed(self):
'''
For started requests that cannot be submitted to Network
hence in a failed state.
'''
return
@transition(field=state, source=started, target=submitted)
def submitted(self):
'''
Change message request to submitted state.
'''
return
@transition(field=state, source='submitted', target=completed)
def completed(self):
'''
Request was sucessfully submited to mno and a response returned.
'''
return
根据我上面的代码,提交的状态转换失败并出现此错误:
Traceback (most recent call last):
worker_1 | File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task
worker_1 | R = retval = fun(*args, **kwargs)
worker_1 | File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 438, in __protected_call__
worker_1 | return self.run(*args, **kwargs)
worker_1 | File "/app/sms_platform/apps/api/tasks.py", line 176, in run
worker_1 | return self._send_sms(msisdn, message, request_id, correlation_id, mno, sender_id, pk=pk)
worker_1 | File "/app/sms_platform/apps/api/tasks.py", line 126, in _send_sms
worker_1 | sms_obj.submitted()
worker_1 | File "/usr/local/lib/python2.7/dist-packages/django_fsm/__init__.py", line 512, in _change_state
worker_1 | return fsm_meta.field.change_state(instance, func, *args, **kwargs)
worker_1 | File "/usr/local/lib/python2.7/dist-packages/django_fsm/__init__.py", line 304, in change_state
worker_1 | object=instance, method=method)
worker_1 | TransitionNotAllowed: Can't switch from state 'started' using method 'submitted'
唯一的区别是在转换源中提交的不像其他的那样被引用。否则,如果我引用“已提交”,它就可以正常工作。
我对此感到困惑,因为所有状态都在类(class)开始时定义。
最佳答案
started
变量重定义为方法名的问题
class SmsMessage(models.Model)
... started, ...= ... "started", ...
@transition(field=state, source='received', target=started)
def started(self): # <- LOL
....
@transition(field=state, source=started, target=submitted)
def submitted(self):
....
>>> print(SmsMessage.started)
<unbound method SmsMessage.started>
关于python - Django FSM 状态转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518370/
组合 FSM 的状态是否“正确”? 假设你有一个对象 enum State { State1 = 1 << 0, State2 = 1 << 1, State3 = 1 <<
我想编写一个以空闲状态开始并根据某些事件从一种状态转移到另一种状态的FSM。我对FSM的编码不熟悉,而Google也无济于事。 欣赏是否有人可以发布可用于同一数据结构的C数据结构。 谢谢, syuga
我在 django-fsm 中让基于源和目标规则的转换装饰器运行良好(有限状态机)。现在我正在尝试添加权限处理。这看起来很简单,但似乎无论我做什么,转换都会执行,无论用户是否拥有权限。我试过 Djan
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在尝试使用有限状态机作为管理简单游戏流程的模型。进入主菜单状态,从中选择开始游戏或修改选项等。 我这样做的方法是创建一个状态基类,每个状态都从该类继承。我有一个管理程序循环的应用程序类,并添加一个
嗨..我想要一个如何在 C 中使用函数指针实现 FSM 的示例。 最佳答案 参见 this simple example关于如何在 C 中实现有限状态机。 关于c - FSM 中的函数指针,我们在St
我想为此语法实现一个 FSM/“下推自动机”解析器:parser with scopes and conditionals已经被“词法分析”到 Finite State Machine parser
我正在使用 Fysom 创建 FSM。我想以其他方式使用回调: TABLE = { 'initial': 'OFF', 'events': [{'name': 'load', 'src': 'OFF'
我是 VHDL 的新手,正在关注 this tutorial实现以下 Mealy 有限状态机: 并用VHDL编写了以下代码: library ieee; use ieee.std_logic_1164
我在 VHDL 中看到的很多 FSM 都是通过在 FSM 逻辑中设置一个变量“next_state”来工作的,然后将它单独分配给进程之外的状态变量。 如果简单地写“state <= state_fiv
当我尝试编写有限状态机时,我刚刚在 Haskell 中遇到了“无限类型”。我认为以下内容非常直观: fsm [] _ acc = Right acc fsm (x:xs) state
我喜欢采用 FSM 需要的指标,直到它达到某个状态。我不想用度量代码向我的类发送垃圾邮件,而是想添加一个特征来覆盖某些方法并在调用该方法时发出一条消息。 例如: trait InstrumentedA
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
假设我有一个类型 Thing拥有国有属性(property)A | B | C , 和合法的状态转换是 A->B, A->C, C->A . 我可以写: transitionToA :: Thing
对具有 native 语言的建议(因此没有 FSM 生成工具)支持状态机开发和执行以及消息/信号的传递。这适用于电信,例如这种复杂程度的 FSM 的实现。 我考虑过 Erlang,但希望得到一些反馈、
Akka提供了两种重叠的方式来管理角色状态Finite State Machines和unbecome/become。他们各自的好处/缺点是什么?什么时候应该选择其中一个? 最佳答案 FSM是DSL,
我必须用 vhdl 编写一个带有计时器的 FSM。 我认为,您无需厌倦了解我的电路将做什么。 我只是想帮助我解决这个问题:从一种状态到另一种状态的每次变化,都会有一个(或多个)时钟周期延迟。问题是,我
我在我的项目中使用 Akka FSM 并打算添加持久性。直接的解决方案是使用 Persistent FSM( https://doc.akka.io/docs/akka/current/persist
我正在 java 类中实现有限状态机。我无法找到另一个例子,其中状态和事件是它们自己的对象(也许这是有原因的?),而且我不太相信我的解决方案,特别是因为我必须为 FSM 分配一个状态(实际管理器)然后
我想在 FSM 中的状态执行之间创建一个计时器间隔。 我现在所拥有的是非常基础的,因为我对编程还是很陌生。如果您能将任何可能的解决方案保持在基本水平附近,那就太好了。 public override
我是一名优秀的程序员,十分优秀!