0

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'

ラムダで宣言していないパラメーターをラムダが考慮している理由がわかりません。make_active 関数から削除すれば実行できますby=Noneが、重要なパラメーターであるため実行できません。

助けてください。

4

1 に答える 1