簡體   English   中英

快速過濾django中的相關字段

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM