首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-fsm在状态更改后调用save()方法吗?

django-fsm在状态更改后调用save()方法吗?
EN

Stack Overflow用户
提问于 2017-11-06 09:43:27
回答 2查看 1.5K关注 0票数 3

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

代码语言:javascript
复制
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中吗?会叫它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 09:55:00

如果调用change_state()成功而不引发异常,则状态字段将被更改,但不会写入数据库。

因此,要对数据库进行更改,需要显式调用obj.save()

代码语言:javascript
复制
def change_view(request, model_id):
    obj = get_object__or_404(MyModel, pk=model_id)
    obj.change_state()
    obj.save()
    return redirect('/')
票数 5
EN

Stack Overflow用户

发布于 2022-09-08 13:59:33

您可以使用post_transition信号来处理这个问题:

代码语言:javascript
复制
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()

这来自本期

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47133896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档