Django中如何使用Managers保存数据

How to use a Managers to save data in Django

我了解 Managers 在 Django 中列出或过滤数据时的作用。然而,当谈到在模型上保存数据时,我经常看到使用以下两种方式...

使用经理:

class Project(TimeStampedModel):
     stuff

    def save(self, **kwargs):
        Action.objects.log_action(user=self.user,comment="Saves a project")

未使用管理器:

class Project(TimeStampedModel):
     stuff

    def save(self, **kwargs):
        action = Action(user=self.user,comment="Saves a project")
        action.save

所以我的问题是,考虑到上面的情况,哪个是正确的?

经理负责 class 级别的工作。保存是实例级操作。

你所说的save实际上有一个create动作,管理员已经默认提供了class。

我相信两者都很好。但是,我更喜欢抽象所有业务逻辑,这样我们甚至不必知道操作日志记录是如何完成的。

当调用 log_action 时,我隐藏了关于什么时候应该传递什么的实现细节。

如果我不使用 log_action,我可能会忘记在我的代码中某处,我可能会在不同的逻辑下保存对象。

所以回到你的问题,我认为这不是使用Manager来保存数据,而是你如何抽象业务逻辑。