【发布时间】:2012-11-22 00:30:00
【问题描述】:
我有一个 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',)
为此,包含上述字段的简单选择查询就足够了,但是当有 FK 时,Django 使用内连接以复杂的方式进行 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
有人可以就为什么需要不必要的查询给出合理的解释吗?
【问题讨论】:
-
我认为是因为简单和无处不在?您可以通过手动覆盖
ModelAdmin.queryset或通过一些包装代码轻松实现。
标签: mysql django python-2.7 django-admin