【问题标题】:Django list_per_page for all models in adminadmin 中所有模型的 Django list_per_page
【发布时间】:2019-03-26 15:03:30
【问题描述】:

美好的一天!我正在尝试找到将 list_per_page 添加为管理员中所有模型的全局参数的解决方案。我发现,ModelAdmin 通过 ChangeList 对象有这个参数,它的默认值是 100。但是如果我想将它设置为 20 并且对所有模型都适用呢?我的意思是,如果我需要在管理员中更改当前模型的 list_per_page,我需要添加:

class CurrentModelAdmin(models.ModelAdmin):
    list_per_page = 20
    ...

有没有办法重新定义 ChangeList 对象来重写默认值? 例如作为 settings.py 中的 LIST_PER_PAGE = 20

更好的是,我如何从前端接收它并动态使用它?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    是的,您在设置中定义了一个变量,例如:

    # settings.py
    
    # ...
    LIST_PER_PAGE = 20
    

    更改个人 ModelAdmin

    那么在你的观点中你可以写:

    from django.conf import settings
    
    class CurrentModelAdmin(models.ModelAdmin):
        list_per_page = settings.LIST_PER_PAGE
    

    使用list_per_page 属性集定义一个基类

    每个 ModelAdmin 视图编写此代码可能很麻烦,因此您可以首先创建一个设置list_per_page 的子类,然后从该模型创建子类:

    from django.conf import settings
    
    class BaseModelAdmin(models.ModelAdmin):
        list_per_page = settings.LIST_PER_PAGE
    
    class CurrentModelAdmin(BaseModelAdmin):
        # ...
        pass

    所以现在我们不再需要在每个ModelAdmin 中指定list_per_page 属性,只要我们从BaseModelAdmin子类化

    猴子补丁ModelAdmin

    您还可以“猴子补丁”list_per_page 属性,因此只更新 ModelAdmin 级别的值:

    # app/monkey_patching.py
    
    from django.conf import settings
    
    ModelAdmin.list_per_page = settings.LIST_PER_PAGE

    并关注steps to "activate" the monkey patching in Django

    【讨论】:

    • 非常感谢您,威廉!我决定使用猴子补丁。它对管理员中的所有模型都有效!太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2017-12-27
    • 2012-04-06
    • 2020-02-14
    • 2011-02-28
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多