gpt4 book ai didi

mysql - 为什么 Django 在 Change List View Page 中进行不必要的 SQL 查询?

转载 作者:可可西里 更新时间:2023-11-01 08:35:35 27 4
gpt4 key购买 nike

我有一个 Django 模型说,

class Student(models.Model):
prefix = models.CharField(max_length = 10, blank = True, null = True,)
suffix = models.CharField(max_length = 10, blank = True, null = True,)
fullname = models.CharField(max_length = 100, null = False,)
fname = models.CharField(max_length = 100, verbose_name = u'First Name', blank = True, null = True,)
midname = models.CharField(max_length = 100, verbose_name = u'Middle Name', blank = True, null = True,)
lname = models.CharField(max_length = 50, verbose_name = u'Last Name', default = ' ')
department = models.ForeignKey('Department')

在列表显示中(admin.py)

    list_display = ('fname', 'midname', 'lname', 'prefix', 'suffix',)

为此,一个简单的包含上述字段的select Query就足够了,但是Django在有FK的情况下使用inner join以复杂的方式进行SQL查询。例如,

通常django必须实现

     SELECT 'fname', 'midname', 'lname', 'prefix', 'suffix' FROM student LIMIT 0,100;

但是 Django 对所有可能的字段执行 SELECT 查询。

SELECT student.prefix.student.suffix .... deparment.id ,depatment.name ..... 
INNER JOIN department ON deparment.id = student.id ........ LIMIT 100

有人可以就为什么需要不必要的查询给出合理的解释吗?

最佳答案

Django 不会预见开发人员将要选择哪些字段。因此它将所有字段提供给管理模板,包括所有相关表中的字段。如果需要,开发人员可以覆盖管理模板。 queryset() 将提供发送自定义 sql 语句的能力。

希望问题得到解答。

关于mysql - 为什么 Django 在 Change List View Page 中进行不必要的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701920/

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