[英]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.