繁体   English   中英

在 Model 实例的内存列表上使用 Django 查询集过滤器 API?

[英]Use Django Queryset filter API on in-memory list of Model instances?

当我已经检索到对象列表时,是否可以重新使用 Django 查询集 API? IE

foos = list(Foo.objects.filter(color="red"))
# below doesn't work, but is what I'd like to reproduce
large_foos = foos.filter(size="large")
small_foos = foos.filter(size="small")

我当然可以遍历我的foos列表,但重用 API 看起来会更干净,尤其是在过滤多个属性时。

为什么我要在内存中过滤的用例:

  • 我想最小化数据库查询的数量
  • foos的返回集很小,并且在内存中过滤更有效
  • color被索引但size不是
  • size具有高基数

iterable_orm 库可能是您正在寻找的: https://github.com/Said007/iterable_orm

这是自述文件中的(修改后的)示例:

from iterable_orm import QuerySet

foos = list(Foo.objects.filter(color="red"))
manager = Queryset(foos)

# Filter foos with age greater than 25 and exclude if size is large.
data = manager.filter(age__gt=20).exclude(size="large")

我过去曾使用过它,并且在我的用例中运行良好。

foos = list(Foo.objects.filter(color="red"))

large_foos = [foo for foo in foos if foo.size='large']
small_foos = [foo for foo in foos if foo.size='small']

它可以工作。 但是如果你有很多foos实例,它可能比进行额外的 SQL 查询要慢得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM