【发布时间】:2012-10-11 23:46:45
【问题描述】:
我有一个带有很多外键(每个平均最多 10 个字段)的大型水平表(30 个字段)。在 Django admin 中显示表格时,我使用 select related 来优化和避免多次查询。我正在寻找的是确保只检索我的 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_related,它提取 y1 到 y10 和 z1 到 z10,即使我不需要所有领域。
此表被大量用作 CRM,由于生成的查询速度较慢,因此目前它是一个大热门。还有blob和巨大的varchars,它们不用于显示,仍在查询中。
谢谢。
【问题讨论】:
-
这更多的是在查询处理级别。
标签: django django-admin django-select-related