दिलचस्प सवाल, जिसने मुझे थोड़ा खुदाई करने के लिए उकसाया।
एक बार व्यवस्थापक कक्षा पंजीकृत हो जाने के बाद, वे ऑब्जेक्ट की विशेषता में संग्रहीत हैं - आश्चर्य की बात नहीं - _registry
। यह मॉडल कक्षाओं के मॉडल मॉडलों का एक शब्दकोश है - नोट्स और मान दोनों कक्षा हैं, नाम नहीं।
तो तुम इस तरह एक admin.py अगर:
:
from django.contrib import admin
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
list_display = ('field1', 'field2')
admin.site.register(MyModel, MyModelAdmin)
तो एक बार है कि वास्तव में आयात किया गया है - - आम तौर पर urls.py में admin.autodiscover()
लाइन द्वारा admin.site._registry
कुछ इस तरह शामिल होंगे
{<class 'myapp.models.MyModel'>:
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>}
और आप कुंजी के रूप में मॉडल खुद का उपयोग करके MyModel
के लिए ModelAdmin वस्तु मिलेगा:
>>> admin.site._registry[MyModel]
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>
स्रोत
2010-06-02 08:03:28
हमम ... यह मेरा पहला प्रयास भी था, लेकिन _registry में कुछ भी नहीं था .. शायद क्योंकि मैंने manage.py shell से चेक किया था, और ऑटोडिस्कवर को नहीं बुलाया गया था। यह हो सकता है! –
धन्यवाद! ** Django 1.4 ** में पूरी तरह से काम करता है, लेकिन मॉडल के भीतर से मॉडलएडमिन को सीधे एक्सेस करने का कोई तरीका नहीं है? यह मेरी विधि से अधिक सुंदर होगा: 'admin.site._registry [obj .__ class __]' :) – caesarsol
@caesarsol आपके मॉडल को एमवीसी के कारण व्यवस्थापक के बारे में कुछ नहीं पता होना चाहिए - Django वास्तव में एमवीसी नहीं है, लेकिन इसके करीब –