Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中对象集合的类Queryset过滤_Python_Django_Django Queryset - Fatal编程技术网

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

Python Django中对象集合的类Queryset过滤,python,django,django-queryset,Python,Django,Django Queryset,我正在寻找一种方法,可以轻松地从模型对象集合中筛选,而不必每次都访问数据库。根据定义,查询集是惰性的,并且总是会命中数据库。所以我想知道是否有什么东西可以做到这一点。如果不是,也许这是一个很好的库来创建 例如: all_records = object_set(Record.objects.filter(company=user.company)) object\u集是一个假设函数,将查询集中的所有对象作为静态数据收集。结果将是一个“对象管理器”实例,该实例可以运行类似于QuerySet过滤器

我正在寻找一种方法,可以轻松地从模型对象集合中筛选,而不必每次都访问数据库。根据定义,查询集是惰性的,并且总是会命中数据库。所以我想知道是否有什么东西可以做到这一点。如果不是,也许这是一个很好的库来创建

例如:

all_records = object_set(Record.objects.filter(company=user.company))
object\u集
是一个假设函数,将查询集中的所有对象作为静态数据收集。结果将是一个“对象管理器”实例,该实例可以运行类似于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中现有的库或功能可以解决这个问题吗?提前谢谢

我认为QuerySet的select_相关方法正是您想要的:


请查看以下项目中的managers.py:

它应该向您展示他是如何实现queryset的

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

如果这个问题的动机是长数据集,那么在Django项目中使用Redis缓存


差不多,但结果仍然是一个qs,它会在每个筛选器或get调用中命中db。