Django - 在另一个应用程序的一个应用程序中注册Admin模型视图

时间:2018-02-14 14:25:12

标签: django class admin

我有点困惑,因为我打算这样做,部分原因是因为文档从中文翻译得有点差,部分原因是因为我只是围绕着基于类的观点。

编辑:我正在使用xadmin(代替django admin)代替内置的django管理站点。

我有以下目录结构:

Project
    manage.py
    db.sqlite3
    /docs
    /static
    /templates
    /main_app
        __init__.py
        settings.py
        urls.py *
        wsgi.py
        /apps
            /xadmin
                adminx.py *
            /survey
                admin.py *

以及main_app.urls中的以下URL映射:

from django.conf.urls import url, include
from django.contrib import admin

import xadmin
xadmin.autodiscover()

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^survey/', include('survey.urls')),
    url(r'xadmin/', include(xadmin.site.urls)),
]

survey.admin有它的类,例如

class SurveyAdmin(admin.ModelAdmin):
    list_display = ('name', 'is_published', 'need_logged_user', 'template')
    list_filter = ('is_published', 'need_logged_user')
    inlines = [CategoryInline, QuestionInline]
    actions = [make_published]

admin.site.register(Survey, SurveyAdmin)

我知道我的Survey应用程序的模型工作正常,因为当我检查db.sql3时,我可以在那里看到我的虚拟条目。当我登录 127.0.0.1:8000/admin 时,我可以看到SurveyAdmin视图已注册并可用。

但是当我登录 127.0.0.1:8000/xadmin 时,SurveyAdmin尚未注册。

xadmin docs开始,我必须在xadmin.adminx中注册管理员类视图。我想要注册的管理类视图已经存在于survey.admin中。我相信我需要做的就是将这些视图移动到xadmin.adminx - 我真的只想在我这样做之前检查以确保这是正确的。

2 个答案:

答案 0 :(得分:0)

你也不应该在urls.py中添加它:

from xadmin.plugins import xversion
xversion.register_models()

它在quickstart docs

答案 1 :(得分:0)

搞定了。我所要做的就是将classes.admin中的类移到xadmin.adminx并稍微更改参数。

survey.admin

移出
class SurveyAdmin(admin.ModelAdmin):
    list_display = ('name', 'is_published', 'need_logged_user', 'template')
    list_filter = ('is_published', 'need_logged_user')

admin.site.register(Survey, SurveyAdmin)

xadmin.adminx

class SurveyAdmin(object):
    list_display = ('name', 'is_published', 'need_logged_user', 'template')
    list_filter = ('is_published', 'need_logged_user')

xadmin.site.register(Survey, SurveyAdmin)

有道理,因为xadmin.adminx意味着要替换你常用的admin.py(之前调查的是.admin)