4

かなりの数の外部キー(それぞれ平均10フィールド)を持つ大きな水平テーブル(30フィールド)があります。Django管理者にテーブルを表示している間、私は最適化に関連する選択を使用し、複数のクエリを回避します。私が探しているのは、list_displayエントリのみが取得され、30フィールド+(外部キーX 10)フィールドすべてが取得されないようにすることです。現在、テーブルのselect*とすべての結合フィールドのselect*が実行されます。基本的に、Django管理者レベルで「値」を取得する方法。ありがとう。

編集:以下の例:

class X(models.Model):
    x1 = models.IntegerField  # needed for admin display
    x2 = models.TextField     # needed for admin display
    x3 = models.ForeignKey(Y) 
    x4 = models.ForeignKey(Z)
    ...                       # X5 to x30 are not needed for admin display
    X30 = models.Integerfield

    @property
    def y1(self) :
        return self.x3.y1

    @property
    def y2(self):
        return self.x4.z1

class Y(models.Model):
    y1 = models.IntegerField  # needed for admin display
    ...
    y10 = models.IntegerField


class Z(models.Model):
    z1 = models.IntegerField  # needed for admin display
    ...                       # z2 to z10 are not needed for admin display
    z10 = models.IntegerField


**admin.py**
list_display = ['x1', 'x2', 'y1', 'z1']

私の問題は、これを表示するために生成されたクエリを見ると、X(x1からx30)でselect *を実行し、select_relatedを使用して、すべてのフィールドが必要ではない場合でも、y1からy10およびz1からz10を抽出することです。

このテーブルはCRMとして頻繁に使用されており、生成されるクエリが遅いため、現在は目を見張るものがあります。表示に使用されておらず、まだ照会されているブロブと巨大なvarcharもあります。

ありがとう。

4

1 に答える 1