Django 从标记中过滤出私有页面
我最近在我的Wagtail支持的网站上制作了一个标签云,但我遇到了一个问题,一些标签(在我的网站中称为“主题”)中只出现了私人文章/页面 到目前为止,我做了类似的事情来获取每个标签中的文章数量,如果没有,则将其过滤掉:Django 从标记中过滤出私有页面,django,wagtail,django-taggit,Django,Wagtail,Django Taggit,我最近在我的Wagtail支持的网站上制作了一个标签云,但我遇到了一个问题,一些标签(在我的网站中称为“主题”)中只出现了私人文章/页面 到目前为止,我做了类似的事情来获取每个标签中的文章数量,如果没有,则将其过滤掉: topics\u with\u articles=Topic.objects.annotate(num\u articles=models.Count(“articlepage”)).filter(num\u articles\uu gt=0) 过滤的主题=包含文章的主题。按(“
topics\u with\u articles=Topic.objects.annotate(num\u articles=models.Count(“articlepage”)).filter(num\u articles\uu gt=0)
过滤的主题=包含文章的主题。按(“-num\u文章”)排序。值(“名称”、“slug”、“num\u文章”)
我的模型设置如下:
从modelcluster.models导入ParentalManyToManyField、ParentalKey
从modelcluster.tags导入ClusterTaggableManager
从taggit.models导入标记,TaggedItemBase
@寄存器代码段
课程主题(标签):
类元:
排序=[“slug”]
proxy=True
详细名称=“主题”
详细名称复数=“主题”
课堂文章主题(TaggedItemBase):
content\u object=ParentalKey(“ArticlePage”,related\u name=“article\u topics”)
课堂文章第页(第页):
topics=ClusterTaggableManager(通过=“articles.ArticleTopic”,blank=True)
我找不到一个简单的解决方案来实现这一点,那么我该怎么做呢?有人在建议的on taggit的undocumented最常见的
函数中,所以我应用了类似这样的解决方案:
articles=ArticlePage.objects.live().public().order\u by(“-date”)
带有过滤文章的主题=ArticlePage.topics.most\u常见(最小计数=1,额外过滤器={'ArticlePage\uu in':articles})
这将通过比较文章
和文章.objects
查询集,过滤掉主题中的所有私人和草稿文章。通过添加min\u count=1
参数,所有没有文章的主题也会被过滤掉
作为额外的奖励,taggit在topics\u的num\u times
注释中添加了过滤文章queryset,这样我就不必自己做了