Django自定义AdminSite和ModelAdmin

1 投票
1 回答
3462 浏览
提问于 2025-04-18 11:34

我创建了一个自己的管理网站,替代了标准的AdminSite:

项目路径:project/admin/base.py

from django.contrib import admin    

class MyAdmin(admin.AdminSite):
    ...    

my_admin = MyAdmin()

并且把一些应用的模型注册到这个管理网站上: 应用路径:fact/admin.py

from django.contrib import admin
from project.admin.base import my_admin
from models import Fact    

class FactAdmin(admin.ModelAdmin):
    fields = ('section', 'description')


my_admin.register(Fact, FactAdmin)

我想知道怎么才能在首页上显示这个模型?我不能使用自动发现功能,正如这里所说的:如何使用自定义AdminSite类? 那个问题里提到的解决办法对我也不管用,我希望能找到一个更简单的方法。

文档中只提到:

使用自己的AdminSite实例时,实际上不需要使用自动发现功能,因为你可能会在myproject.admin模块中导入所有应用的admin.py模块。

不过,我并没有在project.admin模块中导入每个应用的模块。那么,有没有办法让自定义的AdminSite知道已注册的模型,并在首页上显示它呢?

补充:我已经设置了URL,并且我看到的是my_admin,而不是admin。使用标准的admin一切都正常。以下是项目路径:project/urls.py的代码:

from django.conf.urls import patterns, include, url

from admin.base import my_admin

urlpatterns = patterns('',
    ...    
    url(r'^admin/', include(my_admin.urls, app_name='admin')),
)

1 个回答

3

我觉得你需要这样做:

from django.contrib import admin  
class MyAdmin(admin.AdminSite):
  ...    

admin.site = MyAdmin()

撰写回答