问题标签 [django-fsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
636 浏览

django - django-fsm:权限不引发异常

我有基于源和目标规则的转换装饰器在django-fsm(有限状态机)中运行良好。现在我正在尝试添加权限处理。这看起来很简单,但似乎无论我做什么,都会执行转换,而不管用户的权限或缺乏权限。lambda根据文档,我尝试过使用 Django 权限字符串,并且尝试过使用。我已经尝试了所有这些:

并且,作为一个双重检查,因为permission应该响应任何返回 True/False 的可调用,简单地说:

在访问转换时,应该TransitionNotAllowed为所有用户提出一个。但是不——即使是没有权限的基本用户仍然可以执行转换(claim.approve())。

为了证明我有正确的权限字符串:

打印错误。我正在进行如下验证(适用于源/目标):

视图处理程序是标准:

我错过了什么?谢谢。

0 投票
1 回答
1192 浏览

django - 状态改变后 django-fsm 是否调用 save() 方法?

我正在使用 django_fsm 来管理模型中的状态。我的模型看起来像:

我应该将 self.save() 添加到 change_state 吗?会叫吗?

0 投票
0 回答
112 浏览

django - 暂时录制到永久录制

我正在研究创建订单的工作流程。这是我到目前为止得到的

我需要实现一个标准的工作流程,其中包含三个线性步骤,即Select Plan & PreferencePersonal InformationReview & Payment

选择计划和偏好:客户可以选择一个计划以及一些工艺产品。

个人信息:客户将填写与其居住地、电话号码、名字、姓氏、电子邮件等相关的字段

查看和付款:如有必要,创建一个帐户,查看他/她的订单并支付与当前订单相关的付款。

粗略地说,如果付款被接受(即电子商务),将在工作流程的最后一步记录一个帐户和一个订单。因此,在过渡期间,我不希望将信息保存在我的数据库中。过渡期间如何临时记录信息?如果我可以暂时存储该信息,一旦接受付款,我如何将信息保存在数据库中?请注意,付款是工作流程的最后一步。

更新

我不想保存用户的信息,我会把它放在缓存中。将用户信息字典保存一段时间。缓存的密钥可以是购买订单,或者我可以使用个人信息中的某些内容,我需要缓存的密钥。

然后,当我保存信息时,在最后一步中我可以获取字典。

我找到了该解决方案,但我不知道它是否是最佳解决方案。一般来说,我知道继续跟踪该信息是相关的,但是我受到该项目的预算(即存储、性能等)的限制,所以我做不到。

0 投票
2 回答
424 浏览

python - Django 管理父模型的状态,基于“子模型”(对父模型具有 fk 的模型)

设计一个需要模型状态转换的系统,该模型基于其他模型的转换。

我正在使用 Django FSM

例子:

用例:

Foo 可以有以下状态 - new、draft、complete、pending_approval、approved Foo 可以有多个 Bars

酒吧可以有以下状态 - 草稿,完成

Foo 应该在所有 Bar 完成后自动完成,如何实现

0 投票
0 回答
544 浏览

python - 在 django 中使用 django-有限状态机时如何实现基于类的视图

我正在制作一个请假流程,申请人将申请请假,请假将排队,以便批准者批准或拒绝请假申请。我遇到了django-fsmdrf-fsm-transitions,我想到了实现这种工作流程。我正在使用django 1.11++python3django_rest_framework构建我的 API。

在我已导入的 django 应用程序from django_fsm import transition, FSMIntegerFieldmodels.py

离开类

过渡

然后我在休假类中实现了以下转换:

然后在我导入的视图中from drf_fsm_transitions.viewset_mixins import get_viewset_transition_action_mixin

我在运行服务器时收到以下日志:

这是我的视图类的样子:

在 django 中使用 django-fsm 时如何实现基于类的视图

0 投票
1 回答
397 浏览

python - Django-fsm:由于额外的方法参数,动态目标失败

https://github.com/kmmbvnr/django-fsm#target 文档中的原始示例:

我正在使用上述方法来解决动态目标状态。我的功能如下所示:

我有一个额外by=None的用于记录目的。但是,当我运行此功能时,它会说:

我不明白为什么 lambda 正在考虑我什至没有在 lambda 中声明的参数。如果我by=None从 make_active 函数中删除,我可以运行它,但我不能这样做,因为它是一个重要参数。

请帮忙。

0 投票
1 回答
84 浏览

django - 在 Django 中编辑动态选择字段

我有一个带有Post模型的标准 Django 博客,仅在我添加了ManyToManyFieldfor的模型上approvers,其想法是后端将帖子传递给 2 个或更多批准者以在发布内容之前确认内容。

我可能会学习django-fsm为模型创建一个有限状态机Post来管理它是否是草稿/正在批准/已发布,但我希望能够更改该approvers字段,以便批准者(用户)的数量和顺序可由用户动态更改。

做这个的最好方式是什么?我想我可以尝试将approvers字段更改为 aJSONField以便用户可以添加/删除/更改批准者的顺序,然后在前端处理解释并编写一些函数来与 接口django-fsm,但这感觉它混淆了太多东西。我错过了一条更简单的路线吗?

0 投票
0 回答
314 浏览

python - 如何创建具有动态步数的有限状态机

我有一个简单的线性工作流程,其中单个任务将有一个批准者列表,它必须通过(线性,依次)进行确认,然后才能完成。

我将其设计为将User模型用于批准者,另外还有 2 个模型:

  • Task用于管理工作流中各个任务细节的模型;和
  • 显式管理andTaskStep之间关系的模型(而不是依赖 Django 自动填充)。TasksApprover

我想使用django-fsm创建一个有限状态机来跟踪工作流中每个任务的状态。

我知道如果我预先定义每个工作流程中的批准者数量,我可以轻松做到这一点。例如,如果它是 3,我可以简单地将它放在一个整数字段中,然后创建每个批准者会调用的关联函数:

但是,假设我希望允许用户自己定义批准者的数量(以及因此的步骤数)。我该怎么办?我会一直保持这种线性发展,而不是平行发展。

有没有办法用 django-fsm 做到这一点,还是我看错了?我想也许试图STATUS_CHOICES通过循环的数量/长度来动态创建代理,approvers但我不知道如何开始。

也许是and中的一个lamba函数?sourcetargetFSMIntegerField

0 投票
1 回答
48 浏览

python - 为什么我不能在这里使用@staticmethod?

我正在使用 django-fsm 来实现状态机。代码看起来像

它正在工作。在它所属的类之外有那个小实用函数会损害代码的可读性,所以我尝试了

这是行不通的。不知道user_ok_to_check_me现在做什么,它的行为就像一个无操作函数总是返回 True 即使它所做的只是return False

为什么?有没有办法在类中声明这个小函数?(使用时间有点长 lambda instance, user:

0 投票
2 回答
265 浏览

django - Django FSM - get_available_FIELD_transitions

使用 django_fsm 我需要获取可用的转换列表。使用以下代码时,我确实得到了<generator object get_available_FIELD_transitions at 0x10b9ba660>

相反,我想获得一个转换列表,例如['PENDING', 'CLOSED']