在管理站点之外重用Django更改列表

Koo*_*obz 13 django django-admin changelist

Django更改列表表非常酷 - 可搜索,可过滤,多选操作等.

我正在构建一个应用程序的自定义后端,我一直在意识到:这正是我需要的,我应该重新使用它.

有没有人有任何使用Django管理应用程序之外的更改列表的经验?

我目前得到的是这样的:

from profile.admin import ProfileAdmin
from django.contrib.admin.sites import AdminSite
from profile.models import Profile
profile_admin = ProfileAdmin(Profile, AdminSite())
return profile_admin.changelist_view(request)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人有这方面的经验或可以提出替代方案.

JCo*_*ton 9

ChangeList作为一个类非常酷,功能齐全.但是,在AdminSite monolith的上下文之外很难使用它.

ChangeList类需要12个必需__init__()参数.当你意识到这些都来自管理员时,这个数字本身就应该引导你离开并加倍changelist_view().虽然这些参数自Django 1.1以来保持不变,但它们确实从1.0改变而且它是一个Django内部对象,我不会依赖它的界面稳定.

使用ChangeList的最佳方法 - 或者专门用于获取更改列表的好处(这就是你所追求的) - 是使用该changelist_view()方法.使用它当然需要使用/子类化AdminSite.这值得做,或者至少尝试一下.看起来你已经是.

该方法采用指向它的URL路由中的request参数和喜欢/(?P<app_label>%s)/(?P<model_name>%s)/.

深入研究代码:

  • ChangeList 住在 django.contrib.admin.views.main
  • changelist_view() 是一种方法 django.contrib.admin.options.ModelAdmin

更新:在Django中1.4,两者ChangeListchangelist_view()通过分别将一个和两个新的参数改变.