![](/img/trans.png)
[英]How can I filter instances of a model in django, with a queryset value of filter field?
[英]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.