我有一个ModelAdmin
类,其中包含一个外键字段list_display
。但是该模型的管理列表页面正在执行数百个查询,每行一个查询以从另一个表而不是连接 ( select_related()
) 获取数据。
Django 文档表明您可以将list_select_related = True
其作为属性添加到您的 ModelAdmin 以使其消失,但它似乎对我来说根本不起作用。这个 SO question似乎给出了类似的问题,但他的解决方案尚不清楚,并且在我的情况下不起作用。
这是我的模型和模型管理员的精简版:
class Device(models.Model):
serial_number = models.CharField(max_length=80, blank=True, unique=True)
label = models.CharField(max_length=80, blank=True)
def __str__(self):
s = str(self.serial_number)
if self.label:
s += ': {0}'.format(self.label)
return s
class Event(models.Model):
device = models.ForeignKey(Device, null=True)
type = models.CharField(max_length=40, null=False, blank=True, default='')
class EventAdmin(admin.ModelAdmin):
list_display = ('__str__', 'device')
list_select_related = True
但是,添加它list_selected_related = True
并没有改变任何东西。我仍然得到很多这样的查询,而不是 SQL 连接:
任何想法为什么 Django 管理员似乎忽略了我的 list_select_related 并进行 N 查询?我正在使用 Python 2.7 和 Django 1.3.3。