Django模型中的save方法何时不运行?

Django模型中的save方法何时不运行?,django,django-models,Django,Django Models,我有一个Django模型,它覆盖save方法,如下所示: class Log(models.Model): agent = models.ForeignKey(Agent, on_delete=models.CASCADE) calls_logged = models.IntegerField(default=0) texts_logged = models.IntegerField(default=0) completed_logs = models.Bool

我有一个Django模型,它覆盖save方法,如下所示:

class Log(models.Model):
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE)
    calls_logged = models.IntegerField(default=0)
    texts_logged = models.IntegerField(default=0)

    completed_logs = models.BooleanField(default=False, db_index=True)

    def save(self, *args, **kwargs):
        if self.calls_logged >= 30 and self.texts_logged >= 50:
            self.completed_logs = True
        super().save(*args, **kwargs)
代理
达到30个调用和50条文本时,应该使用
save()
方法将
已完成的日志
字段更改为
True
。但当我最近检查我的数据库时,一名代理打了30多个电话,发了50多条短信,但
已完成的日志
没有标记为已完成。但是,当我在管理员中单击“保存”时,它按预期更新了
completed\u logs
字段


所以,我的问题是:Django有没有在模型上调用
save()
方法?有更好的方法吗?

有一些方法可以更新数据库中的条目,而无需调用
save
方法。我能想到的有:

  • queryset的
    update
    方法
  • 查询集的
    bulk\u create
    方法
  • 查询集的
    bulk\u update
    方法
最有可能的情况是您调用了其中一个方法,导致出现这种情况

这里最好的做法是不要将
已完成的\u日志作为字段,而是作为属性:

类日志(models.Model):
agent=models.ForeignKey(agent,on_delete=models.CASCADE)
调用\u logged=models.IntegerField(默认值=0)
text\u logged=models.IntegerField(默认值=0)
@财产
def已完成的_日志(自我):
返回self.calls\u logged>=30和self.text\u logged>=50

显示调用
save()
的位置。我正在使用
update
所以可能就是这样!!非常感谢你!我肯定会切换到您指出的属性设置。Django文档中是否有位置指定哪些模型创建/更新操作不会运行
save()
方法?@Ryan注意,将其作为属性意味着它不会保存在数据库中(反正不需要存储,可以简单地计算):)。关于知道哪些方法不调用
save
,您可以尝试查看,但我想简单地说,所有可以同时更新多个对象的方法都不调用
save