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

Iva*_*kiv 3 django django-fsm

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

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

Sat*_*dra 5

如果调用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('/')
Run Code Online (Sandbox Code Playgroud)

  • 我想知道为什么做出这个设计决定。如果事后保存是安全的,那么总是保存不是更好吗?有什么工具或方法可以永久保存吗? (2认同)