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

2 投票
3 回答
1901 浏览
提问于 2025-04-17 19:55

我想找到一种方法,可以轻松地从一堆模型对象中筛选数据,而不需要每次都去数据库查询。根据定义,QuerySets 是懒加载的,意味着它们总是会去数据库查询。所以我在想有没有现成的东西可以做到这一点。如果没有,也许可以考虑创建一个这样的库。

举个例子:

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 个回答

-1

如果你问这个问题是因为你有很长的数据集,那就可以在你的Django项目中使用Redis缓存。

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

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
1

我觉得你想要的功能是QuerySet的select_related方法:

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

撰写回答