[英]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_APPS
或app/__init__.py
, app/apps.py
,...),这可能是无法预料的副作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.