簡體   English   中英

在子目錄中定義 Django 管理模型而不是 admin.py

[英]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_APPSapp/__init__.pyapp/apps.py ,...),這可能是無法預料的副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM