我正在使用 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在本例中)?
uj5u.com熱心網友回復:
問題在于.get_queryset(…)您的ApprovedPubhishedArtcilesManager. 您可以通過以下方式訪問模型:
class ApprovedPublishedArticlesManager(models.Manager):
def get_queryset(self):
return self.model.approved_objects.filter(is_published=True)
盡管繼承AuthoriseableApprovedManager并利用該.get_queryset(…)方法的基本實作可能會更好。這也更加健壯,因為您不必考慮該經理將注冊的名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395934.html
