2013-05-09 16 views
7

nie mogę uczynić moją pracę na zlecenie kierownika ...Django zwyczaj menedżer get_queryset() nie działa

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

kiedy testować w powłoce, ale to nie działa

>>> 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() powinny powrócić 9959, prawda? Wszelkie pomysły, co może pójść nie tak?

+0

Jaką wersję fo django używasz? Było get_query_set w jednym punkcie. Poza tym, nie wiem. –

+0

Tak, widziałem to w DOC, ale używam wersji 1.5.0 –

+0

>>> django.VERSION (1, 5, 0, "ostateczna", 0) –

Odpowiedz

10

Jestem pewien, że problemem jest metoda get_query_set. This is the doc for version 1.5 menedżerów i mówi:

Można zastąpić podstawową QuerySet danego menedżera poprzez nadpisanie metody Manager.get_query_set(). get_query_set() powinien zwrócić QuerySet z wymaganymi właściwościami.

spróbować zrobić to z get_query_set zamiast get_queryset który jest, jak to wyjaśniono w dev doc:

Można zastąpić podstawową QuerySet danego menedżera poprzez nadpisanie metody Manager.get_queryset(). get_queryset() powinien zwrócić QuerySet z wymaganymi właściwościami.

Jeśli chcesz być w 100% pozytywne, jak metoda jest nazwany w wersji po prostu przejdź do Manager definicji klasy w django/db/models/manager.py i szukać jak nazywa się metodę w klasie.

Mam nadzieję, że pomoże!

+1

+1. Dobry połów :) – J0HN

+1

Chociaż nie podoba mi się ta zmiana. Jest to przełomowa zmiana w Django, a nawet najgorsza, kończy się po cichu. Jeśli to pozostanie, zobaczymy wiele takich pytań tutaj, w SO! lol :) –

+0

Paulo Bu, to DZIAŁA! Wiele milionów dzięki !!!!!!!!!!!! –

Powiązane problemy