2

我正在寻找一种方法来轻松地从模型对象的集合中过滤,而无需每次都访问数据库。根据定义,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 中现有的库或功能可以解决这个问题?提前致谢!

4

3 回答 3

1

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

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

于 2013-03-21T19:29:07.593 回答
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
于 2013-03-21T20:05:16.697 回答
-1

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

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

于 2013-03-22T05:21:29.307 回答