Django中对象集合的类似Queryset的过滤

时间:2013-03-21 19:19:45

标签: python django django-queryset

我正在寻找一种方法,可以轻松地从Model对象集合中进行过滤,而无需每次都访问数据库。根据定义,QuerySets是懒惰的,总是会命中DB。所以我想知道是否有任何可以做到的事情。如果没有,也许它是一个很好的图书馆。

例如:

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中现有的库或功能可以解决这个问题?提前谢谢!

3 个答案:

答案 0 :(得分:1)

我认为QuerySet的select_related方法是你想要的:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

答案 1 :(得分:0)

请查看以下项目中的managers.py: django-model-utils/.../managers.py

它应该向您展示他如何实现查询集

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

答案 2 :(得分:0)

如果长数据集是您对此问题的动机,请在Django项目中使用Redis缓存。

http://unfoldthat.com/2011/09/14/try-redis-instead.html