在django中使用list_display 1.4.5效果表现

时间:2013-11-23 21:58:34

标签: django django-admin

我正在努力修复django管理页面上我的网站上的性能损失。

我有一个模型,其他模型有2个外键。没有什么花哨。我在admin.py中执行以下操作:

class VoteAdmin(admin.ModelAdmin):
  inlines = [ UserVoteCriteriaInline ]
  list_display = ('user')
  readonly_fields = ('solution','user')

我正在注册管理员:

admin.site.register(Vote,VoteAdmin)

我的模型没有后台处理,我也删除了 unicode 函数以防万一。

现在我的数据库现在有20k票数。我觉得进入管理员需要一段时间才能加载,现在查询完成需要26秒。所以我开始调试它。

我发现如果删除list_display,查询将在不到一秒的时间内完成。但添加list_display会将其跳转到25-30秒。我添加到list_display的类型无关紧要,只要list_display存在我就有这个问题。

查看查询似乎完全不同于没有list_display。但我不知道为什么以及我能做什么。

编辑:我看到当我不使用list_display时,任务是一个简单的选择,例如:

SELECT COUNT(*) FROM `main_vote`; args=()
SELECT `main_vote`.`id`, `main_vote`.`user_id`, `main_vote`.`solution_id`, `main_vote`.`text`,
`main_vote`.`wow_factor`, `main_vote`.`vote_factor`, `main_vote`.`score`, 
`main_vote`.`vote_date`, `main_vote`.`active` FROM `main_vote` ORDER BY `main_vote`.`id`
DESC LIMIT 100; args=()

但是当我在显示器上只使用list_display时,它会尝试解析任何内连接,并且它会成为一个巨大的SQL操作。

也许这是1.4.5的已知错误?

另一个编辑:我发现如果我这样做:

class VoteAdmin(admin.ModelAdmin):
list_select_related = True

我遇到同样的问题,就像使用list_display一样。是否有可能list_display默认启用select_related标志?如果这是真的,我怎么能禁用它?我试图把它弄错,但它似乎没有任何效果。

0 个答案:

没有答案