我使用django_fsm来管理我的模型中的状态。我的模型看起来:
from django.db import models,
from django_fsm import FSMField, transition
class MyModel(models.Model):
STATES = (
('pending', _('Pending')),
('active', _('Active'))
)
state = FSMField(choices=STATES, default='pending', protected=True)
@transition(field=state, source='pending', target='active')
def change_state(self):
pass我应该将self.save()添加到change_state中吗?会叫它吗?
发布于 2017-11-06 09:55:00
如果调用change_state()成功而不引发异常,则状态字段将被更改,但不会写入数据库。
因此,要对数据库进行更改,需要显式调用obj.save()
def change_view(request, model_id):
obj = get_object__or_404(MyModel, pk=model_id)
obj.change_state()
obj.save()
return redirect('/')发布于 2022-09-08 13:59:33
您可以使用post_transition信号来处理这个问题:
from django_fsm.signals import post_transition
@receiver(post_transition, sender=models.MyModel)
def save_new_workflow_state(sender, instance, name, source, target, **kwargs):
""" Save the new workflow state following successful django_fsm transition. """
if source != target:
instance.save()这来自本期。
https://stackoverflow.com/questions/47133896
复制相似问题