2013-03-21 90 views
2

我正在寻找一种轻松过滤来自Model对象集合而无需每次都敲击数据库的方法。根据定义,QuerySets是懒惰的,并且总是会碰到数据库。所以我想知道是否有什么可以做到这一点。如果没有,也许它是一个很好的图书馆。在Django中对象集合的Queryset式过滤

例如:

all_records = object_set(Record.objects.filter(company=user.company)) 

object_set是一个假设的功能,其将收集的所有对象在一个QuerySet作为静态数据。结果将是一个“对象管理器”实例,它可能会有类似于QuerySet过滤器的过滤器运行。这在基于来自多维数据列表的数据存储创建,更新和删除对象时特别有用。

for row in data: 
    for col in row: 
    # this would not hit the DB. Only filter within the "object_set" in memory. 
    all_records.filter(date=col.date, type=col.type, creator=col.user) 

我意识到我可能试图解决这个错误的方式,但无论如何,我认为这将有在Django一个伟大的工具。有没有人知道Django中现有的库或功能可以解决这个问题?提前致谢!

回答

0

请,检查出managers.py在以下项目:django-model-utils/.../managers.py

应该告诉你他是如何实现的queryset

def get_query_set(self): 
    qs = super(QueryManager, self).get_query_set().filter(self._q) 
    if self._order_by is not None: 
     return qs.order_by(*self._order_by) 
    return qs