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

Posted

技术标签:

【中文标题】在管理站点之外重用 Django 变更列表【英文标题】:Reusing Django Changelist Outside of Admin Site 【发布时间】:2011-01-19 21:44:18 【问题描述】:

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】:

ChangeList 作为一个类真的很酷而且功能齐全。但是,在 AdminSite 整体环境之外很难使用

ChangeList 类需要 12 个必需的 __init__() 参数。仅凭这个数字就应该让您远离,所以当您意识到这些都来自管理员changelist_view() 时。虽然这些参数自 Django 1.1 以来一直保持不变,但它们确实从 1.0 发生了变化,而且它是一个 Django 内部对象,我不会依赖它的接口是稳定的。

使用 ChangeList 的最佳方式——或者特别是为了获得 changelist 的好处(这是你所追求的)——是使用 changelist_view() 方法。使用它当然需要使用/继承 AdminSite。 这是值得的,或者至少值得一试。看起来你已经这样做了。

该方法采用request 参数并喜欢指向它的URL 路由中的/(?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() 都通过分别添加一个和两个新参数进行了更改。

【讨论】:

以上是关于在管理站点之外重用 Django 变更列表的主要内容,如果未能解决你的问题,请参考以下文章

Django:在管理表单之外使用ForeignKeyRawIdWidget

如何在 Django 中重用可重用的应用程序

在 BrowseFragment 之外重用 AndroidTV RowsFragment

django项目一:基于django2.2可重用登录与注册模块-admin后台

用于在非 SPA 站点上构建可重用组件的 Javascript MVC 框架

在 Core Data 之外重用 NSManagedObject 的结构