2013-05-09 8 views
7

मैं अपने कस्टम प्रबंधक काम नहीं कर सकते हैं ...Django कस्टम प्रबंधक get_queryset() काम नहीं कर रहा

class PublicArtigoManager(models.Manager): 
    def get_queryset(self): 
     return super(PublicArtigoManager, self).get_queryset().filter(data_publicacao__lte=timezone.now()).filter(permissao__lte=3) 

class Artigo(models.Model): 
    ... 
    objects = models.Manager() 
    publics = PublicArtigoManager() 

जब मैं खोल में परीक्षण, यह does not काम

>>> from artigos.models import Artigo 
>>> from django.utils import timezone 
>>> print Artigo.objects.count() 
9960 
>>> print Artigo.publics.count() 
9960 
>>> print Artigo.objects.filter(data_publicacao__lte=timezone.now()).filter(permissao__lte=3).count() 
9959 

Artigo.publics.count() लौटना चाहिए 99 5 9, है ना? आपके हिसाब से क्या गलत हो सकता है?

+0

आप किस संस्करण का उपयोग कर रहे हैं? यह एक बिंदु पर get_query_set था। इसके अलावा, मुझे नहीं पता। –

+0

हाँ मैंने देखा कि डीओसी में, लेकिन मैं 1.5.0 –

+0

>>> django.VERSION (1, 5, 0, 'अंतिम', 0) –

उत्तर

10

मुझे यकीन है कि समस्या get_query_set विधि है। This is the doc for version 1.5 प्रबंधकों और यह कहते हैं:

आप Manager.get_query_set() विधि अधिभावी द्वारा एक प्रबंधक के आधार क्वेरीसमूह ओवरराइड कर सकते हैं। get_query_set() को आपके इच्छित गुणों के साथ एक क्वेरीसेट वापस करना चाहिए।

कोशिश get_query_setget_queryset के बजाय जो है कि यह कैसे dev doc से समझाया गया है के साथ यह करने के लिए:

आप Manager.get_queryset() विधि अधिभावी द्वारा एक प्रबंधक के आधार क्वेरीसमूह ओवरराइड कर सकते हैं। get_queryset() को आपके इच्छित गुणों के साथ एक क्वेरीसेट वापस करना चाहिए।

आप कैसे विधि अपने संस्करण में नामित किया गया है सिर्फ django/db/models/manager.py में अपने Manager वर्ग परिभाषा के पास जाकर खोज कैसे कक्षा में विधि का नाम है के बारे में 100% सकारात्मक होना चाहते हैं।

उम्मीद है कि यह मदद करता है!

+1

+1। अच्छा पकड़ :) – J0HN

+1

हालांकि मुझे यह परिवर्तन पसंद नहीं है। यह Django और यहां तक ​​कि सबसे खराब में एक तोड़ने वाला परिवर्तन है, चुपचाप विफल रहता है। अगर वह रहता है तो हम यहां बहुत सारे प्रश्न देखेंगे जैसे SO! लॉल :) –

+0

पाउलो बु, यह काम किया! कई मिलियन धन्यवाद !!!!!!!!!!! –

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