2011-01-21 12 views
7

मैं डिफ़ॉल्ट रूप से केवल "प्रकाशित" उदाहरण लौटा दूंगा (प्रकाशित = सही)। क्या यह ऑब्जेक्ट्स को ओवरराइड करना संभव है ताकि MyModel.objects.all() वास्तव में MyModel.objects.filter (प्रकाशित = सही) लौटाता है?क्या django मॉडल पर .objects को ओवरराइड करना संभव है?

क्या यह समझदार है? दुर्लभ मामलों में मैं अप्रकाशित लोगों को कैसे प्राप्त करूं जहां मैं उन्हें चाहता था?

उत्तर

15

आप कस्टम Manager लिखकर ऐसा कर सकते हैं - बस get_queryset विधि को ओवरराइड करें और अपने objects को प्रबंधक उदाहरण में सेट करें। उदाहरण के लिए:

class MyModelManager(models.Manager): 
    def get_queryset(self): 
     return super(MyModelManager, self).get_queryset().filter(published=True) 

class MyModel(models.Model): 
    # fields 
    # ... 

    objects = MyModelManager() 

विवरण के लिए docs देखें। यह समझदार है कि यह आपका सामान्य, डिफ़ॉल्ट मामला होने जा रहा है। अप्रकाशित होने के लिए, एक और प्रबंधक बनाएं जिसे आप MyModel.unpublished_objects जैसे किसी चीज़ से एक्सेस कर सकते हैं। दोबारा, दस्तावेज़ों में इस तरह की चीज पर उदाहरण हैं।

+0

मेरा उद्धारकर्ता !!! धन्यवाद! –

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