我正在看一些代码,我很好奇这是不是很好的做法。
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(释义)方法。这是处理事情的好方法吗?
答案 0 :(得分: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上找到。
答案 1 :(得分:1)
它不是替代来覆盖get_query_set
- 它提供了其他获取(过滤)实例的方法。你可以同时做(两者兼而有之)。
你期待什么问题?
PS此方法也用于Pro Django,第274页以及使用most_recent()
等方法扩展管理器。