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来保存数据,而是你如何抽象业务逻辑。
我了解 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来保存数据,而是你如何抽象业务逻辑。