繁体   English   中英

在子目录中定义 Django 管理模型而不是 admin.py

[英]Defning Django admin models inside subdirectories instead of admin.py

我的目标是在单独的文件中定义管理模型。 所以项目结构是这样的:

应用程序

admin_models
       __init__.py
       TestAdmin.py

测试管理员.py:

from django.contrib import admin
from cms.models import (
    TestModel)


class TestAdmin(admin.ModelAdmin):
    fields = (...)


admin.site.register(TestModel, TestAdmin)

问题是 model 没有出现在管理页面上。 但是,在标准结构中(如果我将TestAdmin.py文件的内容移动到应用程序内部顶层的admin.py ),那么一切正常。 有任何解决这个问题的方法吗?

Django 的内部结构(例如“自动发现” )依赖于特定的应用程序结构。 部分原因是已安装应用程序中的admin命名空间是在应用程序加载时导入的(在AppConfig.ready方法中)。 所以你可以制作一个 package 结构,如:

app
    admin
        __init__.py
        test_admin.py  # different from admin class name!
        another_admin.py

在您的test_admin.py中,您像以前一样定义您的TestAdmin class。 在包的__init__.py中,您从子模块中导入管理员:

# __init__.py
from .test_admin import TestAdmin
from .other_admin import YetAnotherAdmin

这样,您可以构建您的代码库,django 的内部工作仍将注册 model 管理员,因为他们在寻找它们的地方。

正如@Alasdair 所指出的,您还可以在自定义 AppConfig 中“手动”导入自定义管理模块。 如果您还没有,我会坚持使用上述方法,因为它不需要在各个地方进行更改( INSTALLED_APPSapp/__init__.pyapp/apps.py ,...),这可能是无法预料的副作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM