2010-02-17 3 views
12

डिफ़ॉल्ट रूप से Django व्यवस्थापक साइट देखने के लिए संबंधित मॉडल/तालिका के सभी रिकॉर्ड दिखाती है। मैं केवल उन मानदंडों को कैसे दिखा सकता हूं जो कुछ मानदंडों को पूरा करते हैं?Django व्यवस्थापक साइट में देखने के लिए क्वेरीसेट/रिकॉर्ड्स को कैसे सीमित करें?

+0

क्या आप डिफ़ॉल्ट रूप से मतलब रखते हैं, या आप बस उस विकल्प को चेंजलिस्ट पेज से उपलब्ध करना चाहते हैं? डिफ़ॉल्ट रूप से –

+0

। जब भी मैं पृष्ठ लोड करता हूं, यह केवल रिकॉर्ड दिखाता है जिसका अर्थ कुछ आवश्यकताओं है। बैक एंड में उन आवश्यकताओं को बदला जा सकता है। – Viet

+0

और साथ ही, उनको चेंजलिस्ट पेज में दिखाने के लिए कैसे करें? – Viet

उत्तर

25

अपनी व्यवस्थापक परिभाषा में, आप queryset() विधि को परिभाषित कर सकते हैं जो उस मॉडल के व्यवस्थापक के लिए क्वेरीसेट लौटाता है। उदाहरण के लिए:

class MyModelAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(MyModelAdmin, self).queryset(request) 
     return qs.filter(user=request.user) 

तो केवल user=request.user साथ वस्तुओं व्यवस्थापक में दिखाई जाएगी।

+1

+1 मैं इसे देखने में बहुत खुश हूं और यह इतना आसान साबित हुआ! धन्यवाद! – Viet

+0

लेकिन इस तरह, यदि आप इसके लिए खोज करना चाहते हैं तो अन्य उपयोगकर्ताओं के लिए अतिरिक्त प्रश्न प्राप्त करना संभव नहीं है। तो यह जिस तरह से मैंने इसे पढ़ा है, इस सवाल का जवाब नहीं देता है। –

+9

चूंकि Django 1.6 'queryset' को 'get_queryset' – peter2108

3

मुझे पता है कि इसका एक "स्वीकार्य उत्तर" है, लेकिन मैं इसे बाहर फेंकना चाहता था क्योंकि मैं कुछ और करने के दौरान इस जवाब में आया था और महसूस किया कि मेरे पास एक वैकल्पिक समाधान था जिसे मैंने पाया और अक्सर उपयोग किया जो मुझे और देता है स्वीकार्य उत्तर से दानेदार स्तर नियंत्रण।

class TestAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "FIELD": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

    def formfield_for_manytomany(self, db_field, request, **kwargs): 
     if db_field.name == "FIELDS": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) 
+0

द्वारा प्रतिस्थापित किया गया है, वहां देखें कि वहां क्या हुआ! उसका जवाब अच्छा था ..... तुम्हारा बेहतर था। स्टर्लिंग काम –