我不确定我在这里报告的发现是否会对 kender 完全有帮助,因为除其他外,我不知道他是否不仅在谈论两个管理站点,而且还谈论两个数据库,一个用于每个。这就是我的情况。我有了一个好主意,我希望我的一个应用程序,一个新应用程序,拥有自己的数据库和管理页面。
但是我遇到了 Bernhard Vallant 的 AdminSite 子类化方法的问题,尽管这似乎是正统且本质上正确的做法。我解决了这个问题。
这是我认为非常必要的 Bernhard Valant 代码的 mod:
from django.contrib.admin.sites import AdminSite
class MyAdminSite(AdminSite):
pass
#or overwrite some methods for different functionality
myadmin = MyAdminSite(name='anything')
是的,我的意思是您选择的 name='anything'(只要不是 'admin')。而且我已经使用它进行了切换,但每次都失败了,但没有分配管理员名称。
我得到的症状是,当我添加第二个数据库并为其创建一个 myadmin,然后使用 myadmin.register(My_ModelA) 注册模型时,我去查看两个管理应用程序页面,一个是我的使用第二个数据库和 myadmin 的新应用程序和模型 My_ModelA 看起来不错,但是我的旧管理页面显示其模型的死链接,当我单击应用程序的非死链接时(使用旧数据库的旧应用程序) ) 我得到了一个 404 代码,表明该页面不存在。
另外,我不知道这很重要,但我做了一些不同的事情
Bernhard Valant 在项目 urlconf 中所做的:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include('mynewapp.urls')),
url(r'^someword/admin/', include(admin.site.urls)),
)
好的,“someword”是无关紧要的——那里是关于最终用户的外观,而不是应用程序或项目的名称。但是关联的管理员是我的旧应用程序和旧数据库的管理员。注意 autodiscover() 包含。在将项目 urlconf 配置为 Bernhard Vallant 使用 myadmin 导入但也引用默认管理员时,Bernhard Vallant 链接到的文档中有一些模糊的语言。
对于 mynewapp 的 urlconf,我有:
from django.conf.urls import patterns, url, include
from myproject.admin import myadmin
urlpatterns = patterns('',
url(r'/', include(myadmin.urls) )
)
urlpatterns += patterns('mynewapp.views',"... url() stuff for mynewapp's views"),
)
尽管完全有必要在内部将 AdminSite 实例命名为“admin”以外的名称,但我必须补充一点,当需要使用一些 admin.ModelAdmin 子类来使 mynewapp 的 admin.py 文件更加生动时,确实有必要使用 admin.ModelAdmin 作为父类。 myadmin 毕竟是 AdminSite 子类的一个实例。因此,我认为它与 admin.site 相当,而不是 admin。
对于像我这样的 NOOB 来说,这一切都非常令人困惑,因为小写的 admin 看起来像一个实例,而我不熟悉子类化实例。所以我认为不是。