首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤django-taggit顶部标签

如何过滤django-taggit顶部标签
EN

Stack Overflow用户
提问于 2018-06-27 02:13:14
回答 1查看 573关注 0票数 3

假设您有一个用户对象运行在Djano应用程序后面的数据库,并且希望使用django-taggit标记用户对象,这样就可以使用一些方便的筛选来检索子组。

此外,您还有一个仪表板,您希望在其中显示有关使用过的标记的有趣统计信息,以收集用户中存在的子组的一些信息。

  1. 如何访问和显示Django应用程序中使用的顶级X标记的信息?
  2. 如何只访问用户对象的已过滤子组的顶部X标记?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 02:13:14

虽然已经有一些文章描述了类似的问题,但其中大多数描述了解决办法,或者包含了分散的信息。

为了更容易地找到这些信息,我将简单地介绍如何使用django-taggit的一些特性来实现一些基本功能,这些特性是官方支持的,但在正式文档中是而不是

如何访问和显示Django应用程序中使用的顶级X标记的信息?

为了访问和显示Django应用程序中使用的顶部标记的信息,可以使用内置函数most_common,如下所示:

代码语言:javascript
复制
top_tags = User.tag.most_common()

这将返回一个查询集,该查询集包含放置在用户实例上的所有标记,这些标记都是从大多数使用的降序顺序中排序的。假设我们有3个标签:["vegetables", "fruits", "candy"]和10个用户有一个fruits标记,4个用户有一个vegetables标记,只有一个用户有candy标记,返回的顺序是:["fruits", "vegetables", "candy"]

访问有关返回的标记的更多信息可以如下所示:

代码语言:javascript
复制
for tag in top_tags:
    print(tag.name) #the name of the tag
    print(tag.num_times) # the number of User objects tagged

此外,如果您只对前3种标签感兴趣,那么您可以这样访问它们:

代码语言:javascript
复制
top_tags = User.tag.most_common()[:3]

其中,可以用X替换3,其中X是要返回的项目数。

如何只访问用户对象的已过滤子组的顶部X标记?

自2016年7月12日以来,most_common()函数实际上有一些可以指定的附加参数。首先,您可以指定一个min_count,它过滤掉低于某个阈值的顶部标记。作为一个示例,使用前面示例中的标记:

代码语言:javascript
复制
top_tags = User.tag.most_common()[:3]

返回前面指定的所有三个标记,但使用

代码语言:javascript
复制
top_tags = User.tag.most_common(min_count=2)[:3]

只返回["fruits", "vegetables"],这是因为只有一个用户对象被标记为candy,这意味着它低于2的min_count

您可以向most_common提供的另一个参数是extra_filters,它使您能够提供一个对象,其中包含要对标记进行筛选的附加筛选值。

其中一个使用示例是:

代码语言:javascript
复制
filtered_users = User.objects.filter(age=20, is_delete=False)

    top_tags = User.tag.most_common(
        min_count=1, extra_filters={
            'user__in': filtered_users
        }
    )

在这里,我们创建了用户对象的过滤查询集,然后提供给extra_filters参数,以将标记搜索限制在特定的子组中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51053595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档