gpt4 book ai didi

Django 管理更改列表优化查询 : select field1, field2 而不是选择 *

转载 作者:行者123 更新时间:2023-12-03 22:02:13 25 4
gpt4 key购买 nike

我有一个很大的水平表(30 个字段),其中有很多外键(每个平均最多 10 个字段)。在Django admin中显示表时,我使用select相关来优化和避免多次查询。我正在寻找的是确保只检索我的 list_display 条目,而不是所有 30 个字段 +(外键 X 10)个字段。当前,表上的选择 * + 所有连接字段上的选择 * 运行。基本上,一种在 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,并且由于生成的查询速度缓慢,它目前是一个展示器。还有 blob 和巨大的 varchars,它们不用于显示并且仍在查询中。

谢谢。

最佳答案

请记住,在您的 list_display块你可以随时更换 x3x3_id使用您手头已有的 FK 值,根本不进行任何额外查找(完全放弃 select_related)。

然后,您可以将其与您的 list_display 的自定义函数结合起来。如概述 here也许用指向他们自己的管理页面的超链接替换那些原始 FK 整数?

关于Django 管理更改列表优化查询 : select field1, field2 而不是选择 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13006823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com