मैं एक ही मॉडल के लिए एक से अधिक ModelAdmin कैसे बना सकता हूं, प्रत्येक को अलग-अलग रूप से अनुकूलित किया गया है और विभिन्न URL से लिंक किया गया है?
मान लीजिए कि मेरे पास एक Django मॉडल है जिसे पोस्ट कहा जाता है। डिफ़ॉल्ट रूप से, इस मॉडल का व्यवस्थापक दृश्य सभी पोस्ट ऑब्जेक्ट को सूचीबद्ध करेगा।
मुझे पता है कि मैं पृष्ठ पर प्रदर्शित वस्तुओं की सूची को विभिन्न तरीकों से सूचीबध्द कर सकता हूं जैसे कि सूची_डिसप्ले जैसे चर सेट करना या querysetअपने मॉडलएडामिन में विधि को ओवरराइड करना जैसे:
class MyPostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date')
def queryset(self, request):
request_user = request.user
return Post.objects.filter(author=request_user)
admin.site.register(MyPostAdmin, Post)
डिफ़ॉल्ट रूप से, यह URL पर सुलभ होगा /admin/myapp/post। हालाँकि मैं एक ही मॉडल के कई विचार / ModelAdmins रखना चाहूंगा। उदाहरण के /admin/myapp/postलिए सभी पोस्ट ऑब्जेक्ट /admin/myapp/mypostsको सूचीबद्ध करेगा , और उपयोगकर्ता से संबंधित सभी पोस्ट को सूचीबद्ध करेगा , और उन सभी पोस्ट को /admin/myapp/draftpostसूचीबद्ध कर सकता है जो अभी तक प्रकाशित नहीं हुए हैं। (ये सिर्फ उदाहरण हैं, मेरा वास्तविक उपयोग-मामला अधिक जटिल है)
आप एक ही मॉडल (एक AlreadyRegisteredअपवाद में यह परिणाम ) के लिए एक से अधिक ModelAdmin पंजीकृत नहीं कर सकते । आदर्श रूप में मैं एक एकल ModelAdmin वर्ग में सब कुछ डाले बिना और URL के आधार पर एक अलग क्वेरीसेट वापस करने के लिए अपना 'urls' फ़ंक्शन लिखने के बिना इसे प्राप्त करना चाहूंगा ।
मैं Django स्रोत पर एक नज़र है और मुझे लगता है ModelAdmin.changelist_viewकि किसी तरह मेरे urls.py में शामिल किया जा सकता है जैसे कार्य देखते हैं , लेकिन मुझे यकीन नहीं है कि यह कैसे काम करेगा।
अद्यतन : मैंने जो चाहा है उसे करने का एक तरीका पाया है (नीचे देखें), लेकिन मैं अभी भी ऐसा करने के अन्य तरीके सुनना पसंद करूंगा।