Django中对象集合的类似Queryset过滤
我想找到一种方法,可以轻松地从一堆模型对象中筛选数据,而不需要每次都去数据库查询。根据定义,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缓存。
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