覆盖 AdminSite 使 admin.py 另一个应用程序不显示在 django 管理
override AdminSite make admin.py another app doesn't show at django admin
在我的项目中,有多个应用程序,所以我也有 admin.py 每个文件夹。这是我的一些 admin.py
api/admin.py
from django.contrib import admin
from .models import Message
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ['source','name','created']
list_filter = ['source','created']
search_fields = ['message']
dummy/admin.py
from django.contrib.admin import AdminSite
from dummy.forms import MyAdminLoginForm
# export admin.py another app
from api.models import Message
from api.admin import MessageAdmin
class MyAdminSite(AdminSite):
login_form = MyAdminLoginForm
login_template = 'dummy/templates/admin/login.html'
site = MyAdminSite()
site.register(Message,MessageAdmin)
因为我想在 django 管理员登录时使用验证码,我应该通过 dummy/admin.py 覆盖从 AdminSite 继承的登录表单。之后我在主 url
上注册自定义登录
from django.contrib import admin
from django.urls import path, include
from dummy.admin import site
admin.site = site
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls'))
]
你可以看到我在 dummy/admin.py 上重新注册了 api/admin.py,我这样做是因为如果我没有重新注册 api/admin.py,它不会显示在 django 管理员中。当我使用从 AdminSite
继承的自定义登录表单时,我应该怎么做才能使 admin.py 另一个应用程序不需要像以前那样重新注册
您可以只修补并使用原来的 admin.site
:
from django.contrib import admin
admin.site.login_form = MyAdminLoginForm
admin.site.login_template = 'dummy/templates/admin/login.html'
在我的项目中,有多个应用程序,所以我也有 admin.py 每个文件夹。这是我的一些 admin.py
api/admin.py
from django.contrib import admin
from .models import Message
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ['source','name','created']
list_filter = ['source','created']
search_fields = ['message']
dummy/admin.py
from django.contrib.admin import AdminSite
from dummy.forms import MyAdminLoginForm
# export admin.py another app
from api.models import Message
from api.admin import MessageAdmin
class MyAdminSite(AdminSite):
login_form = MyAdminLoginForm
login_template = 'dummy/templates/admin/login.html'
site = MyAdminSite()
site.register(Message,MessageAdmin)
因为我想在 django 管理员登录时使用验证码,我应该通过 dummy/admin.py 覆盖从 AdminSite 继承的登录表单。之后我在主 url
上注册自定义登录from django.contrib import admin
from django.urls import path, include
from dummy.admin import site
admin.site = site
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls'))
]
你可以看到我在 dummy/admin.py 上重新注册了 api/admin.py,我这样做是因为如果我没有重新注册 api/admin.py,它不会显示在 django 管理员中。当我使用从 AdminSite
继承的自定义登录表单时,我应该怎么做才能使 admin.py 另一个应用程序不需要像以前那样重新注册您可以只修补并使用原来的 admin.site
:
from django.contrib import admin
admin.site.login_form = MyAdminLoginForm
admin.site.login_template = 'dummy/templates/admin/login.html'