django模型的状态机
django-states3的Python项目详细描述
说明
django模型的状态引擎。定义模型的状态图,然后 记住每个对象的状态。可以记录的状态转换 物体。在
安装
pip install django-states3
使用示例
要使用状态机,应该向模型添加一个状态字段
^{pr2}$如果启用了log_transitions,则会创建另一个模型。一切 应与南部兼容,以便于迁移。在
注意:如果要在中创建DataMigrationSouth,记住使用 obj.save(no_state_validation=True)
使用示例:
p=Purchase()# Will automatically create state object for this purchase, in the# initial state.p.save()p.get_purchase_state_info().make_transition('mark_paid',request.user)# User parameter is optionalp.state# Will return 'paid'p.get_purchase_state_info().description# Will return 'Purchase paid'# Returns an iterator of possible transitions for this purchase.p.get_purchase_state_info().possible_transitions()# Which can be used like this..[x.get_name()forxinp.possible_transitions]
为了更好地控制过渡,请重写:
- has_permission(self, instance, user):检查此用户是否 允许进行此转换。在
- handler(self, instance, user):在此期间运行的代码 过渡。当在这里引发异常时,转换 不会被制造出来。在
获取处于特定状态的所有对象:
Purchase.objects.filter(state='initiated')
验证
您可以添加一个需要在状态转换之前通过的测试 执行。你可以根据当前用户添加2:1 (has_permission)和一个通用(validate)。在
因此,对于StateTransition-对象,您需要指定一个额外的 validate函数(签名是validate(cls, instance))。这个 应该产生TransitionValidationError,这样您就可以返回 在转换发生之前,需要传递多个错误。在
has_permission函数(签名 has_permission(transition, instance, user))应该检查 允许给定用户进行转换。E、 超级用户可以 缓和所有评论,而其他用户只能缓和评论 他们的博客文章。在
组
有时你想把几个州组合在一起,因为 查看(或其他内容)在哪种状态下并不重要 是。我们支持2个不同的州组,包括(仅限于这些)或 独家(除此之外的所有产品):
classis_paid(StateGroup):states=['paid','shipped']classis_paid(StateGroup):exclude_states=['initiated']
状态图
您可以通过运行^{tt14}获得状态图$ 管理指挥部。在
python manage.py graph_states myapp.Purchase.state
这需要graphviz和python绑定 graphviz:pygraphviz和yapgvb。在
- 项目
标签: