8

カスタムマネージャーが機能しません...

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

シェルでテストすると、動作しません

>>> 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()9959を返す必要がありますよね?何がうまくいかないのでしょうか?

4

1 に答える 1

14

get_query_set問題は方法だと思います。これはバージョン 1.5マネージャーのドキュメントで、次のように書かれています。

Manager.get_query_set() メソッドをオーバーライドすることで、Manager のベース QuerySet をオーバーライドできます。get_query_set() は、必要なプロパティを持つ QuerySet を返す必要があります。

dev docで説明されている方法get_query_setの代わりに、それを試してみてください:get_queryset

Manager.get_queryset() メソッドをオーバーライドすることで、Manager のベース QuerySet をオーバーライドできます。get_queryset() は、必要なプロパティを持つ QuerySet を返す必要があります。

バージョンでメソッドがどのように命名されているかについて 100% 肯定的になりたい場合は、Managerクラス定義に移動して、クラスdjango/db/models/manager.py内のメソッドの命名方法を検索してください。

それが役に立てば幸い!

于 2013-05-09T18:55:20.030 に答える