虽然 SO 上已经有很多帖子描述了类似的问题,但其中大部分都描述了解决方法或包含分散的信息。
为了使这些信息更容易找到,我将发布一个简单的纲要,说明如何使用django-taggit 官方支持但的功能实现一些基本功能strong> 出现在官方文档中。
您将如何访问和显示有关前 X 个标签的信息
在 Django 应用中使用?
为了访问和显示有关 Django 应用程序中使用的顶级标签的信息,您可以使用内置函数 most_common,如下所示:
top_tags = User.tag.most_common()
这将返回一个查询集,其中包含放置在 User 实例上的所有标签,这些标签按最常用的降序排列。
假设我们有 3 个标签:["vegetables", "fruits", "candy"] 和 10 个用户有一个 fruits 标签,4 个用户有一个 vegetables 标签,只有 1 个用户有 candy 标签返回的订单将是:["fruits", "vegetables", "candy"]
可以像这样访问有关返回的标签的更多信息:
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 个标签
User 对象的子组?
自 2016 年 7 月 12 日起,most_common() 函数实际上有一些您可以指定的附加参数。首先,您可以指定一个min_count,它会过滤掉低于某个阈值的顶部标签。作为使用上一个示例中的标签的说明:
top_tags = User.tag.most_common()[:3]
返回之前指定的所有三个标签,但使用
top_tags = User.tag.most_common(min_count=2)[:3]
仅返回 ["fruits", "vegetables"] 这是因为只有 1 个用户对象被标记为 candy,这意味着它低于 2 个的 min_count
您可以提供给most_common 的另一个参数是extra_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_filters 参数,以将标签搜索限制为特定的子组