0

我正在查看一些代码,我很好奇这是否是一种好习惯。

      class ToDoManager(models.Manager):
          def scheduled(self):
          """
          Returns QuerySet of all things to be done.
          """
          return self.filter(...)


      class ImpStuff(models.Model):
          ....model definition

          objects=TodoManager    

我总是看到自定义管理器覆盖 get_query_set(释义)方法。这是处理事情的好方法吗?

4

2 回答 2

3

使用模型管理器来包装复杂的 ORM 查询是非常干燥和推荐的。您可以为这些方法添加参数并为自己节省大量代码:

class ToDoManager(models.Manager):
      def scheduled(self, start_date, end_date):
      """
      Returns tasks to be done within two dates.
      """
      return self.filter(...)

然后,您只需执行以下操作:

todo_tasks = ImpStuff.objects.scheduled(datetime.now(), datetime.datetime.now() + datetime.timedelta(3))

在 Github 上提供的许多开源 Django 应用程序中都使用了管理器。

于 2011-08-25T18:18:04.890 回答
1

我以前做过。它工作得很好。因此,除非您正在查看我的代码,否则世界上显然有两个人认为这很有用。

它不是覆盖的替代方案get_query_set- 它提供了获取(过滤)实例的其他方法。你可以同时做这两件事(在合理的范围内)。

你期待什么问题?

PS 这种方法也用在 Pro Django 中,第 274 页起,管理器使用most_recent().

于 2011-08-25T17:16:31.893 回答