Django 管理员 : Setting list_display conditionally

标签 django django-models django-admin

是否有任何管理模型方法,如 get_list_display() 或某种方式,我可以有一些条件来设置不同的 list_display 值?

class FooAdmin (model.ModelAdmin):
    # ...
    def get_list_display ():
        if some_cond:
            return ('field', 'tuple',)
        return ('other', 'field', 'tuple',)

最佳答案

ModelAdmin 类有一个名为 get_list_display 的方法,该方法将 request 作为参数,默认返回该类的 list_display 属性。

所以你可以这样做:

class ShowEFilter(SimpleListFilter):
    """ A dummy filter which just adds a filter option to show the E column,
        but doesn't modify the queryset.
    """
    title = _("Show E column")
    parameter_name = "show_e"

    def lookups(self, request, model_admin):
        return [
            ("yes", "Yes"),
        ]

    def queryset(self, request, queryset):
        return queryset

class SomeModelAdmin(admin.ModelAdmin):

    list_display = (
      "a",
      "b",
      "c",
      "d",
      "e"
    )
    list_filter = (
        ShowEFilter,
    )


    def get_list_display(self, request):
        """ Removes the E column unless "Yes" has been selected in the 
            dummy filter.
        """
        list_display = list(self.list_display)
        if request.GET.get("show_e", "no") != "yes":
            list_display.remove("e")

        return list_display

关于Django 管理员 : Setting list_display conditionally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377520/

相关文章:

django - 为什么具有 JSONFields 的不同 Django 模型具有相同的值?

python - Django 获取列表中每个值的最后一个对象

django-admin - Django Admin中 ListView 和更改 View 的不同查询集优化

django - 如何限制queryset/记录在Django管理站点中查看?

python - 为什么 Django Admin 模型页面在成功迁移后引发 FieldDoesNotExist 异常?

python - 无法在 Ubuntu Server 16.04 上安装 Django 2 Beta 1

django - 文件字段 : How to use upload_to with a whitespace in the name and path

python - 谷歌应用引擎 : get_or_create()?

ajax - 当浏览器中的值发生变化时,如何刷新 django 管理表单?

python - Django: NoReverseMatch at/'myapp' 不是注册的命名空间