[英]Fast filter on related fields in django
我的django项目中有2个模型。
ModelA(models.Model):
id = models.AutoField(primary_key=True)
field1 = ...
~
fieldN = ...
ModelB(models.Model):
id = models.AutoField(primary_key=True)
a = models.ForeignKey(A, on_delete=models.CASCADE)
field1 = ...
~
fieldN = ...
在这里,我有一对一的关系A-> B. 表A有大约30个不同的字段和10.000+行,表B有大约15和10.000.000+行。 我需要首先通过几个ModelA
字段进行过滤,然后为每个过滤的ModelA
行/对象获取相关的ModelB
对象,并按几个字段过滤它们。 之后我需要在JSON中序列化它们,其中所有ModelB
在一个字段中打包为数组。
是否有可能在1-3秒左右执行此操作? 如果是,最好的方法是什么?
我使用PostgreSQL。
编辑:
现在,我在简单的ModelA
字段上执行链接.filter()
,然后遍历结果QuerySet
并为每个ModelA
实例获取ModelB
集,但我怀疑,此解决方案的第二部分将减慢整个过程,所以我假设有更好的方法来做到这一点。
执行这样的查询可能会更快:
model_a_queryset = ModelA.objects.filter(field=whatever)
model_b_queryset = ModelB.objects.filter(a__in=model_a_queryset)
因为Django执行了懒惰的查询集评估,所以这只会导致数据库的一次命中。
另外,您无需在模型上定义id = Autofield
字段。 Django默认包含它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.