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

时间:2010-02-23 01:14:19

标签: 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)

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

1 个答案:

答案 0 :(得分:9)

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

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

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

该方法采用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()分别通过添加一个和两个新参数而发生了变化。