我无法让我的自定义经理工作...

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

当我在 shell 中测试时,它不起作用
>>> 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,对吧?任何想法可能出什么问题吗?

最佳答案

我确定问题是get_query_set方法。 This is the doc for version 1.5管理员,它说:



尝试使用get_query_set而不是get_queryset来做到这一点,这在dev doc中进行了说明:



如果您希望100%肯定版本中方法的名称,请转到Manager中的django/db/models/manager.py类定义,然后在类中搜索方法的命名方式。

希望能帮助到你!

10-08 06:17