我正在寻找一种方法,可以轻松地从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中现有的库或功能可以解决这个问题?提前谢谢!
答案 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缓存。