【发布时间】:2017-11-07 09:20:20
【问题描述】:
我们正在删除为管理页面触发的 count(*) 查询,我们不希望在着陆页上触发该查询,但应该在过滤页面上触发该查询。在 django 中有什么方法可以自定义过滤视图但不能登陆视图。我阅读了文档,浏览了代码,但没有找到任何东西,所以在这里问。
我找到了一些关于触发计数查询的位置的信息,但我找不到根据过滤视图和普通视图修改更改列表视图的方法。
【问题讨论】:
标签: python django django-views
我们正在删除为管理页面触发的 count(*) 查询,我们不希望在着陆页上触发该查询,但应该在过滤页面上触发该查询。在 django 中有什么方法可以自定义过滤视图但不能登陆视图。我阅读了文档,浏览了代码,但没有找到任何东西,所以在这里问。
我找到了一些关于触发计数查询的位置的信息,但我找不到根据过滤视图和普通视图修改更改列表视图的方法。
【问题讨论】:
标签: python django django-views
所以,我们终于找到了答案。
在 django 中,我们有一个名为 show_full_result_count 的属性用于管理页面,它禁用过滤页面上的计数查询以显示完整计数。
Refer to this picture。当我们把它放到False 时,它不会在那里显示那个数字,See this。
这是它的代码。
class SomemodelAdmin(models.Admin):
show_full_result_count = False
list_display = ()
admin.models.register(Somemodel, SomemodelAdmin)
这将使我们免于将查询次数减少到一半。围绕这个的整个逻辑可以在django/contrib/admin/views/main.py 和这个django/contrib/admin/templates/admin/search_form.html 上找到
这里需要注意的是,如果您已经覆盖了任何模板,请确保该模板对 show_full_result_count 属性没有约束。我们实际上覆盖了基本模板,它具有full_result_count 的条件,这使我们产生了一个隐藏管理操作的错误,为此我们定义了一个名为show_admin_actions 的属性,我们必须使用它。
【讨论】: