管理中所有模型的 Django list_per_page

NON*_*AMA 4 django django-admin

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

class CurrentModelAdmin(models.ModelAdmin):
    list_per_page = 20
    ...
Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*sem 6

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

# settings.py

# ...
LIST_PER_PAGE = 20
Run Code Online (Sandbox Code Playgroud)

更改个别ModelAdmin课程

然后在你的观点中你可以写:

from django.conf import settings

class CurrentModelAdmin(models.ModelAdmin):
    list_per_page = settings.LIST_PER_PAGE
Run Code Online (Sandbox Code Playgroud)

定义具有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
Run Code Online (Sandbox Code Playgroud)

所以,现在我们要做不再需要指定list_per_page的每个属性ModelAdmin,只要我们继承BaseModelAdmin

猴子补丁ModelAdmin

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

# app/monkey_patching.py

from django.conf import settings

ModelAdmin.list_per_page = settings.LIST_PER_PAGE
Run Code Online (Sandbox Code Playgroud)

并按照步骤在 Django 中“激活”猴子补丁