2010-06-02 4 views
11

कोई यह देखने के लिए कैसे जांचता है कि मॉडल मॉडल किसी दिए गए मॉडल के लिए मौजूद है या नहीं?django: किसी दिए गए मॉडल के लिए मॉडलडमिन की जांच करें

modeladmins admin.site ऑब्जेक्ट के साथ एक मॉडल पंजीकृत करके बनाए जाते हैं। यह देखने के लिए कि कौन से मॉडल पंजीकृत हैं, और किस व्यवस्थापक_क्लास के साथ साइट ऑब्जेक्ट की जांच कर सकते हैं?

उत्तर

14

दिलचस्प सवाल, जिसने मुझे थोड़ा खुदाई करने के लिए उकसाया।

एक बार व्यवस्थापक कक्षा पंजीकृत हो जाने के बाद, वे ऑब्जेक्ट की विशेषता में संग्रहीत हैं - आश्चर्य की बात नहीं - _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> 
+0

हमम ... यह मेरा पहला प्रयास भी था, लेकिन _registry में कुछ भी नहीं था .. शायद क्योंकि मैंने manage.py shell से चेक किया था, और ऑटोडिस्कवर को नहीं बुलाया गया था। यह हो सकता है! –

+0

धन्यवाद! ** Django 1.4 ** में पूरी तरह से काम करता है, लेकिन मॉडल के भीतर से मॉडलएडमिन को सीधे एक्सेस करने का कोई तरीका नहीं है? यह मेरी विधि से अधिक सुंदर होगा: 'admin.site._registry [obj .__ class __]' :) – caesarsol

+0

@caesarsol आपके मॉडल को एमवीसी के कारण व्यवस्थापक के बारे में कुछ नहीं पता होना चाहिए - Django वास्तव में एमवीसी नहीं है, लेकिन इसके करीब –

संबंधित मुद्दे