Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在子目录中定义Django管理模型而不是admin.py_Python_Django_Django Admin - Fatal编程技术网

Python 在子目录中定义Django管理模型而不是admin.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) 问题是模型没有出现在管理页面上。但是,在标准结构中

我的目标是在单独的文件中定义管理模型。因此,项目结构如下所示:

应用程序

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的内部结构(例如)依赖于特定的应用程序结构。部分原因是在加载应用程序时(在方法中)导入已安装应用程序中的
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