Python 在子目录中定义Django管理模型而不是admin.py
我的目标是在单独的文件中定义管理模型。因此,项目结构如下所示: 应用程序 TestAdmin.py:Python 在子目录中定义Django管理模型而不是admin.py,python,django,django-admin,Python,Django,Django Admin,我的目标是在单独的文件中定义管理模型。因此,项目结构如下所示: 应用程序 TestAdmin.py: from django.contrib import admin from cms.models import ( TestModel) class TestAdmin(admin.ModelAdmin): fields = (...) admin.site.register(TestModel, TestAdmin) 问题是模型没有出现在管理页面上。但是,在标准结构中
from django.contrib import admin
from cms.models import (
TestModel)
class TestAdmin(admin.ModelAdmin):
fields = (...)
admin.site.register(TestModel, TestAdmin)
问题是模型没有出现在管理页面上。但是,在标准结构中(如果我将TestAdmin.py
文件的内容移动到应用程序顶层的admin.py
),那么一切都正常。无论如何,要解决这个问题?Django的内部结构(例如)依赖于特定的应用程序结构。部分原因是在加载应用程序时(在方法中)导入已安装应用程序中的admin
命名空间。因此,您可以创建一个包结构,如:
app
admin
__init__.py
test_admin.py # different from admin class name!
another_admin.py
在test\u admin.py
中,您可以像以前一样定义TestAdmin
类。在包的\uuuu init\uuuu.py
中,从子模块导入管理员:
# __init__.py
from .test_admin import TestAdmin
from .other_admin import YetAnotherAdmin
这样,您就可以构建代码库,django的内部工作仍然会注册模型管理员,因为他们在它寻找他们的地方
正如@Alasdair所指出的,您还可以在自定义AppConfig中“手动”导入自定义管理模块。如果您还没有,我会坚持使用上述方法,因为它不需要在不同的地方进行更改(
已安装的应用程序
或应用程序/\u初始uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
,应用程序/应用程序.py
,…),这可能会产生不可预见的副作用。为什么要调用包管理员模型?里面没有模特,我不想叫它。实际上,我只想看到我的管理员模型再次出现在Django管理员页面中。我不确定你所说的“管理模式”是什么意思?我想你说的是模型管理员。是的,这就是我的意思。抱歉弄乱了术语)除此之外,还会发生admin.py
文件的“自动发现”,因为您在已安装的应用程序中包含了。因此,另一种方法是使用您自己的配置类来导入/注册您的模型管理类。
# __init__.py
from .test_admin import TestAdmin
from .other_admin import YetAnotherAdmin