添加 list_filter 时,如何在 django modeladmin 更改列表中修复/设置列宽?

Posted

技术标签:

【中文标题】添加 list_filter 时,如何在 django modeladmin 更改列表中修复/设置列宽?【英文标题】:How to fix/set column width in a django modeladmin change list table when a list_filter is added? 【发布时间】:2012-08-31 20:18:47 【问题描述】:

我正在努力改进一个 django 项目中的 admin.py,虽然我并不完全对 list_diplay 中包含三个字段的表的输出方式感到兴奋,但至少它比只获得一个默认对象要好一列跨越整个页面的列表...

无论如何,我要问的是为什么:

class FieldAdmin(admin.ModelAdmin):
    list_display = ('name', 'label', 'standard',  )

看起来像这样:

当我添加一个 list_filter 时,像这样:

class FieldAdmin(admin.ModelAdmin):
    list_display = ('name', 'label', 'standard',  )
    list_filter = ['standard',]

为什么会这样?

有没有办法让列重新增长以填充宽度,就像添加过滤器之前一样?我一直在阅读文档和谷歌搜索,但它似乎没有内置?我正在做的项目目前使用的是django 1,2,3,final。

FWIW,导致这种情况的 css 在这里:

.change-list .filtered table, .change-list .filtered .paginator, 
.filtered #toolbar, .filtered div.xfull 
    margin-right: 160px !important;
    width: auto !important;

禁用宽度样式规范可以修复它,但如果有的话,我宁愿用 django 方式做事 - 我希望也许有一种方法可以从 FieldAdmin 类自定义过滤器视图?

【问题讨论】:

【参考方案1】:

admin.py:

class MyClassAdmin(admin.ModelAdmin):

    class Media:
        css = 
            'all': ('fancy.css')
        

fancy.css:

.column-foo 
    width: 20px;

其中“foo”是一个字段名。

来源:https://docs.djangoproject.com/en/3.0/topics/forms/media/

【讨论】:

【参考方案2】:

你可能想参考这个:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

基本上,change_list.html 需要被覆盖。

你可以这样做:

templates/
  admin/
    app/
      change_list.html

您可以从django/contrib/admin/templates/admin/获取change_list.html的副本

并按照您想要的方式更新 css。

【讨论】:

我意识到这在计划中并不是什么大不了的事,但对于这么小的事情来说似乎很极端(我显然不是在责怪你,这只是令人失望 ;-) 感谢您的回答!

以上是关于添加 list_filter 时,如何在 django modeladmin 更改列表中修复/设置列宽?的主要内容,如果未能解决你的问题,请参考以下文章

如何在admin.py中按用户选择list_filter?

如何覆盖在 list_filter 中提供过滤器的查询集?

Django admin list_filter 重复

django admin list_filter "or" 条件

将 Django 部署到 AWS Fargate 时,如何将本地 ip 添加到 ALLOWED_HOSTS

我可以在 django admin 中制作 list_filter 以仅显示引用的 ForeignKeys 吗?