Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理员更改列表优化查询:选择字段1、字段2而不是选择*_Django_Django Admin_Django Select Related - Fatal编程技术网

Django管理员更改列表优化查询:选择字段1、字段2而不是选择*

Django管理员更改列表优化查询:选择字段1、字段2而不是选择*,django,django-admin,django-select-related,Django,Django Admin,Django Select Related,我有一个很大的水平表(30个字段),其中有很多外键(每个外键平均多达10个字段)。在Django管理员中显示表时,我使用select related来优化并避免多次查询。我要寻找的是确保只检索我的列表显示条目,而不是检索所有30个字段+(外键X 10)字段。当前,表上的select*和所有联接字段上的select*都会运行。基本上,这是一种在Django管理级别获取“值”的方法。谢谢 编辑: 下面是一个例子: class X(models.Model): x1 = models.Inte

我有一个很大的水平表(30个字段),其中有很多外键(每个外键平均多达10个字段)。在Django管理员中显示表时,我使用select related来优化并避免多次查询。我要寻找的是确保只检索我的列表显示条目,而不是检索所有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上执行select*(x1到x30),并使用select_related提取y1到y10和z1到z10,尽管我不需要所有字段

此表被大量用作CRM,并且由于生成的查询速度较慢,它目前是一个showtupper。还有blob和巨大的varchar,它们不用于显示,仍在查询中


谢谢。

请记住,在您的
列表显示
块中,您始终可以将
x3
替换为
x3\u id
,以使用手头已有的FK值,而不必进行任何额外的查找(同时选择与之相关的)


然后,您可以将其与所述的用于
列表显示的自定义函数相结合,以使用指向其自身管理页面的超链接替换这些原始FK整数?

您在寻找什么:或者这更多是在查询处理级别。