如何筛选django taggit顶部标记

如何筛选django taggit顶部标记,django,filtering,django-taggit,Django,Filtering,Django Taggit,假设您有一个数据库,其中用户对象在Djano应用程序后面运行 您需要使用django-taggit标记用户对象,以便使用一些方便的筛选检索子组 此外,您还有一个仪表板,希望在其中显示有关已使用标记的有趣统计信息,以收集有关用户中存在的子组的一些信息 如何访问和显示有关顶部X标记的信息 在Django应用程序中使用 如何仅访问已筛选的文件的顶部X个标记 用户对象的子组 虽然已经有很多帖子描述了类似的问题,但其中大多数都描述了解决方法或包含了分散的信息 为了让这些信息更容易找到,我将发布一个简单的摘

假设您有一个数据库,其中用户对象在Djano应用程序后面运行 您需要使用
django-taggit
标记用户对象,以便使用一些方便的筛选检索子组

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

  • 如何访问和显示有关顶部X标记的信息 在Django应用程序中使用

  • 如何仅访问已筛选的文件的顶部X个标记 用户对象的子组


  • 虽然已经有很多帖子描述了类似的问题,但其中大多数都描述了解决方法或包含了分散的信息

    为了让这些信息更容易找到,我将发布一个简单的摘要,介绍如何使用官方支持但官方文档中未提供的
    django taggit
    功能实现一些基本功能

    如何访问和显示有关顶部X标记的信息 在Django应用程序中使用

    为了访问和显示Django应用程序中使用的顶级标签的信息,您可以使用内置功能
    most_common
    ,如下所示:

    top_tags = User.tag.most_common()
    
    这将返回一个queryset,其中包含从最常用的降序排列的用户实例上放置的所有标记。 假设我们有3个标签:
    [“蔬菜”、“水果”、“糖果”]
    ,10个用户有
    水果
    标签,4个用户有
    蔬菜
    标签,只有1个用户有
    糖果
    标签,返回的订单将是:
    [“水果”、“蔬菜”、“糖果”

    访问有关返回的标记的更多信息可以这样做:

    for tag in top_tags:
        print(tag.name) #the name of the tag
        print(tag.num_times) # the number of User objects tagged
    
    此外,如果您只对前3个标签感兴趣,那么您可以 按如下方式访问它们:

    top_tags = User.tag.most_common()[:3]
    
    可以将3替换为X,其中X是要返回的项目数


    如何仅访问已筛选的文件的顶部X个标记 用户对象的子组

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

    top_tags = User.tag.most_common()[:3]
    
    返回前面指定的所有三个标记,但使用

    top_tags = User.tag.most_common(min_count=2)[:3]
    
    仅返回
    [“水果”、“蔬菜”]
    这是因为只有1个用户对象被标记为
    糖果
    ,这意味着它低于
    最小计数
    的2

    可以提供给
    最常见的
    的另一个参数是
    extra\u filters
    ,这使您能够提供一个对象,其中包含要根据其筛选标记的其他筛选值

    一个使用示例是:

    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\u filters
    参数,以将标记搜索限制到特定的子组