Django .update不会调用覆盖保存?

Nem*_* Ga 3 python django django-models

我试图在模型中调用这个覆盖保存方法:

def save(self, *args, **kwargs):
    if self.done is True:
        if self.averagepa is None:
            pass
        elif self.averagepa < 26:
            self.links = 5
        elif self.averagepa < 31:
            self.links = 10
        elif self.averagepa < 36:
            self.links = 15
        elif self.averagepa < 41:
            self.links = 20
        else:
            self.links = 99
super(KW, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

如果我只是在管理面板中保存模型,这非常有效.但是,当我尝试通过./manage.py shell这样更新它:

KW.objects.filter(id=138).update()
Run Code Online (Sandbox Code Playgroud)

它不会触发它.如何通过shell更新调用保存覆盖方法?

Ala*_*air 12

这是该方法的记录行为update().

请注意,该update()方法直接转换为SQL语句.这是直接更新的批量操作.它不会save()在模型上运行任何方法,也不会发出pre_save或post_save信号(这是调用的结果save()),或者遵循auto_now字段选项.如果要保存QuerySet中的每个项目并确保save()在每个实例上调用该方法,则不需要任何特殊函数来处理它.只需循环它们并打电话save().

在你的情况下:

kw = KW.objects.get(id=138)
# update kw
kw.save()
Run Code Online (Sandbox Code Playgroud)