【问题标题】:override AdminSite make admin.py another app doesn't show at django admin覆盖 AdminSite 使 admin.py 另一个应用程序不显示在 django admin
【发布时间】:2023-03-05 16:45:01
【问题描述】:

在我的项目中,有多个应用程序,所以我也有 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 另一个应用程序不需要像以前那样重新注册

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    你可以打补丁并使用原来的admin.site

    from django.contrib import admin
    
    admin.site.login_form = MyAdminLoginForm
    admin.site.login_template = 'dummy/templates/admin/login.html'
    

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2023-04-03
      • 2019-07-02
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多