Django-fsm:动态目标因额外的方法参数而失败
Django-fsm : Dynamic Targets fail due to extra method parameters
https://github.com/kmmbvnr/django-fsm#target
文档中的原始示例:
@transition(
field=state,
source='for_moderators',
target=GET_STATE(
lambda self, allowed: 'published' if allowed else 'rejected',
states=['published', 'rejected']))
def moderate(self, allowed):
self.allowed=allowed
我正在使用上述方法来解析动态目标状态。我的函数如下所示:
@fsm_log_by
@transition(
field=state,
source=[constants.BookingState.on_hold],
target=GET_STATE(
lambda self: constants.BookingState.camop_assigned if self.camera_operator else constants.BookingState.active,
states=[constants.BookingState.active, constants.BookingState.camop_assigned]),
permission=can_make_active,
)
def make_active(self, by=None):
async('some async task', self.pk)
async('some other async task', self.pk)
我有一个额外的 by=None
用于记录目的。但是,当我 运行 这个函数时,它说:
<lambda>() got an unexpected keyword argument 'by'
我不明白为什么 lambda 会考虑我什至没有在 lambda 中声明的参数。如果我从 make_active 函数中删除 by=None
,我可以 运行 它,但我不能这样做,因为它是一个重要参数。
请帮忙。
我知道出了什么问题。 lambda 自动获取方法的所有参数。 by=None 是字典类型,所以我必须在 lambda 中指定 **kwargs。
更新代码:
@fsm_log_by
@transition(
field=state,
source=[constants.BookingState.on_hold],
target=GET_STATE(
lambda self, **kwargs: constants.BookingState.camop_assigned if self.camera_operator else constants.BookingState.active,
states=[constants.BookingState.active, constants.BookingState.camop_assigned]),
permission=can_make_active,
)
def make_active(self, by=None):
async('some async task', self.pk)
async('some other async task', self.pk)
https://github.com/kmmbvnr/django-fsm#target 文档中的原始示例:
@transition(
field=state,
source='for_moderators',
target=GET_STATE(
lambda self, allowed: 'published' if allowed else 'rejected',
states=['published', 'rejected']))
def moderate(self, allowed):
self.allowed=allowed
我正在使用上述方法来解析动态目标状态。我的函数如下所示:
@fsm_log_by
@transition(
field=state,
source=[constants.BookingState.on_hold],
target=GET_STATE(
lambda self: constants.BookingState.camop_assigned if self.camera_operator else constants.BookingState.active,
states=[constants.BookingState.active, constants.BookingState.camop_assigned]),
permission=can_make_active,
)
def make_active(self, by=None):
async('some async task', self.pk)
async('some other async task', self.pk)
我有一个额外的 by=None
用于记录目的。但是,当我 运行 这个函数时,它说:
<lambda>() got an unexpected keyword argument 'by'
我不明白为什么 lambda 会考虑我什至没有在 lambda 中声明的参数。如果我从 make_active 函数中删除 by=None
,我可以 运行 它,但我不能这样做,因为它是一个重要参数。
请帮忙。
我知道出了什么问题。 lambda 自动获取方法的所有参数。 by=None 是字典类型,所以我必须在 lambda 中指定 **kwargs。
更新代码:
@fsm_log_by
@transition(
field=state,
source=[constants.BookingState.on_hold],
target=GET_STATE(
lambda self, **kwargs: constants.BookingState.camop_assigned if self.camera_operator else constants.BookingState.active,
states=[constants.BookingState.active, constants.BookingState.camop_assigned]),
permission=can_make_active,
)
def make_active(self, by=None):
async('some async task', self.pk)
async('some other async task', self.pk)