[英]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.