かなりの数の外部キー(それぞれ平均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もあります。
ありがとう。