【发布时间】:2021-12-28 14:02:27
【问题描述】:
我正在使用 Django 3.2
我有以下型号:
class AuthoriseableApprovedManager(models.Manager):
def get_queryset(self):
return super(AuthoriseablePendingManager, self).get_queryset().filter(computed_status=AUTHORISATION_STATUS_APPROVED)
class Authorisable(models.Model):
# various fields ...
approved_objects = AuthoriseableApprovedManager()
class ApprovedPublishedArticlesManager(models.Manager):
def get_queryset(self):
return self.approved_objects.filter(is_published=True)
class Article(Authorisable,
# Other base classes
):
# various fields
# ....
objects = models.Manager() # The default manager.
approved_published_articles = ApprovedPublishedArticlesManager()
class Meta:
ordering = ('-created_at', )
我的views.py中有以下代码
class ArticleListView(ListView):
model = Article
def get_queryset(self):
return self.model.approved_published_articles.all() # <- Barfs here ...
我收到错误消息:
“ApprovedPublishedArticlesManager”对象没有属性“approved_objects”
这是有道理的,因为ApprovedPublishedArticlesManager 不是从Authorisable 派生的。
如何创建允许我根据基类属性进行过滤的自定义管理器 - 我的自定义管理器是否必须从 models.Manager 和相关基类(在本例中为 Authorisable)派生?
【问题讨论】:
标签: django django-models django-managers