我的目标是在单独的文件中定义管理模型。因此,项目结构如下所示:
应用程序
admin_models
__init__.py
TestAdmin.py
TestAdmin.py:
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的内部(例如"autodiscovery")依赖于某个应用程序结构。部分原因是在应用程序加载时导入已安装应用程序中的} 方法中)。因此,您可以创建一个包结构,如:
admin
命名空间(在^{在
test_admin.py
中,您可以像以前一样定义TestAdmin
类。在包的__init__.py
中,从子模块导入管理员:这样,您就可以构建代码库,django的内部工作仍然会注册模型管理员,因为他们在它寻找他们的地方
正如@Alasdair所指出的,您还可以在自定义AppConfig中“手动”导入自定义管理模块。如果您还没有,我将坚持使用上述方法,因为它不需要在可能产生不可预见的副作用的不同位置(
INSTALLED_APPS
或app/__init__.py
,app/apps.py
,…)进行更改相关问题 更多 >
编程相关推荐