मान लें कि मेरे पास एक ऐसी साइट है जहां उपयोगकर्ता व्यवस्थापक पैनल के माध्यम से प्रविष्टियां जोड़ सकते हैं। प्रत्येक उपयोगकर्ता की अपनी श्रेणी होती है जिसके लिए वह ज़िम्मेदार होता है (प्रत्येक श्रेणी में फ़ोरिंगकी/कई टोमनीफिल्ड के माध्यम से असाइन किया गया संपादक होता है)।django व्यवस्थापक में changelist_view में queryset को फ़िल्टर करने के लिए कैसे?
जब उपयोगकर्ता प्रवेश कहते हैं, मैं इस तरह EntryAdmin का उपयोग करके विकल्पों को सीमित:
class EntryAdmin(admin.ModelAdmin):
(...)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'category':
if request.user.is_superuser:
kwargs['queryset'] = Category.objects.all()
else:
kwargs['queryset'] = Category.objects.filter(editors=request.user)
return db_field.formfield(**kwargs)
return super(EntryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
इस तरह से मैं एक उपयोगकर्ता प्रविष्टि जोड़ सकते हैं जो में श्रेणियां सीमित कर सकते हैं और यह सही काम करता है।
अब मुश्किल हिस्सा: प्रवेश परिवर्तक/क्रिया पृष्ठ पर मैं केवल उन प्रविष्टियों को दिखाना चाहता हूं जो मौजूदा उपयोगकर्ता की श्रेणी से संबंधित हैं। मैं इस पद्धति का उपयोग यह करने के लिए करने की कोशिश की:
def changelist_view(self, request, extra_context=None):
if not request.user.is_superuser:
self.queryset = self.queryset.filter(editors=request.user)
लेकिन मैं इस त्रुटि मिलती है:
AttributeError: 'function' object has no attribute 'filter'
यह अजीब है, क्योंकि मैंने सोचा कि यह एक विशिष्ट क्वेरीसमूह होना चाहिए। असल में ऐसी विधियां not well documented हैं और डीजेगो कोड के माध्यम से खोदना मेरा पसंदीदा खेल नहीं है।
कोई विचार मैं अपना लक्ष्य कैसे प्राप्त कर सकता हूं?
क्वेरीसमूह श्रेणी द्वारा फ़िल्टर किया जाना चाहिए। लेकिन एक समस्या है जब उपयोगकर्ता के पास एक से अधिक श्रेणियां असाइन की गई हैं। या शायद मैं कुछ याद कर रहा हूँ। – minder