2011-08-25 153 views
0

我在看一些代码,我很好奇这是否是好的做法。Django自定义管理器

 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(释义)方法。这是处理事情的好方法吗?

回答

1

我以前做过这个。它工作得很好。所以除非你看我的代码,显然世界上有两个人觉得这很有用。

它不是一个替代压倒一切get_query_set - 它提供了获取(过滤)的实例额外方式。你可以同时做两件事(合理的)。

您期待什么问题?

PS这种方法也用于Pro Django,第274页及其后面的经理用most_recent()等方法进行扩展。

+0

是的我会期望像Model.objects.scheduled()方法链。是对的吗? – Ben

+0

是!它似乎是正确的地方放东西... –

+0

真棒谢谢安德鲁! – Ben

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)) 

经理在很多开源的Django的应用程序,在Github上可用的使用。