假设您有一个数据库,其中的User对象在Djano应用程序后运行
并且您想使用django-taggit
标记用户对象,以便可以使用一些方便的过滤来检索子组。
此外,您还有一个仪表板,您想在其中显示有关已使用标签的有趣统计信息,以收集有关用户中存在的子组的一些信息。
您将如何访问和显示有关前X个标签的信息 在Django应用中使用了?
如何仅访问已过滤的前X个标记 用户对象的子组?
答案 0 :(得分:2)
尽管SO上已经有许多帖子描述了类似的问题,但大多数都描述了变通方法或包含分散的信息。
为了使这些信息更容易找到,我将发布一个简单的摘要,介绍如何使用django-taggit
的功能(已得到官方支持,但 不)来实现一些基本知识出现在官方文档中。
您将如何访问和显示有关前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]
在这里您可以用X替换3,其中X是您要退回的商品数量。
您将如何仅访问已过滤的前X个标记 用户对象的子组?
自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
}
)
在这里,我们创建了一个过滤后的User对象查询集,然后将其提供给extra_filters
参数,以将标签搜索限制在特定的子组中