我正在努力修复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标志?如果这是真的,我怎么能禁用它?我试图把它弄错,但它似乎没有任何效果。