我不能让我的自定义经理工作......
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,对吗?什么想法可能会出错?
答案 0 :(得分:12)
我确定问题是get_query_set
方法。 This is the doc for version 1.5经理们说:
您可以通过覆盖Manager.get_query_set()方法来覆盖Manager的基本QuerySet。 get_query_set()应返回一个具有所需属性的QuerySet。
尝试使用get_query_set
代替get_queryset
,而dev doc中的解释如下:
您可以通过覆盖Manager.get_queryset()方法来覆盖Manager的基本QuerySet。 get_queryset()应该返回一个QuerySet,其中包含您需要的属性。
如果您想对您的版本中方法的命名方式100%肯定,请转到Manager
中的django/db/models/manager.py
类定义,然后搜索如何在类中命名该方法。
希望它有所帮助!