2013-05-09 20 views
7

non riesco a fare il mio lavoro responsabile personalizzato ...Django direttore personalizzato get_queryset() non funziona

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() 

quando prova nel guscio, doesnt lavoro

>>> 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() dovrebbe restituire 9959, giusto? Qualche idea su cosa potrebbe andare storto?

+0

Quale versione di django stai usando? Era get_query_set a un certo punto. A parte questo, non lo so. –

+0

Sì, l'ho visto nella DOC, ma sto usando 1.5.0 –

+0

>>> django.VERSION (1, 5, 0, 'final', 0) –

risposta

10

Sono sicuro che il problema è il metodo get_query_set. This is the doc for version 1.5 manager e si dice:

È possibile ignorare QuerySet di base di un manager sovrascrivendo il metodo Manager.get_query_set(). get_query_set() dovrebbe restituire un QuerySet con le proprietà richieste.

Provate a farlo con get_query_set invece di get_queryset che è come è spiegato nel dev doc:

È possibile sostituire QuerySet di base di un manager sovrascrivendo il metodo Manager.get_queryset(). get_queryset() dovrebbe restituire un QuerySet con le proprietà richieste.

Se si vuole essere positivo al 100% di come il metodo è chiamato nella vostra versione è sufficiente accedere alla tua definizione di classe Manager in django/db/models/manager.py e cercare come si chiama il metodo nella classe.

Spero che aiuti!

+1

+1. Buona cattura :) – J0HN

+1

Anche se non mi piace questo cambiamento. È un cambiamento irrisolto in Django e anche il peggiore, fallisce silenziosamente. Se rimarrà, vedremo un sacco di domande del genere qui in SO! lol :) –

+0

Paulo Bu, ha funzionato! Milioni di milioni grazie !!!!!!!!!!!! –