我的模特:
class PicKeyword(models.Model):
"""chat context collection
"""
keyword = models.TextField(blank=True, null=True)
我的过滤器:
from django.db.models import Count
PicKeyword.objects.annotate(Count('keyword'))[0].keyword__count
结果总为1
就像:
print(PicKeyword.objects.filter(keyword='hi').count()
显示: 3
PicKeyword.objects.filter(keyword='hi').annotate(Count('keyword'))[0].keyword__count
显示: 1
是因为我使用sqllite还是我的关键字类型是Textfield?
答案 0 :(得分:1)
以下将显示确切的计数:
PicKeyword.objects.annotate(Count('keyword')).count()
答案 1 :(得分:1)
您尝试在此处注释关键字数量的方式,
PicKeyword.objects.annotate(Count('keyword'))[0].keyword__count
仅在您要总结多个对象之间的关系时才有效。由于keyword
字段没有任何相关对象,因此输出始终为1(它是自己的实例)
作为queryset.annotate状态的API文档,
使用提供的查询表达式列表注释QuerySet中的每个对象。表达式可以是简单值,也可以是对模型(或任何相关模型)上字段的引用,也可以是针对与对象中的对象相关的对象计算出的聚合表达式(平均值,总和等)。 QuerySet。
Blog Model reference用于Queryset.annotate示例
最后,如果对象之间没有关系,而您的目标只是获取PicKeyword
模型中的对象数,那么@samba和@Willem的答案是正确的。
答案 2 :(得分:0)
我遇到了完全相同的问题,没有答案对我有用。 我能够使用以下语法将其传递为1个字段作为值来工作(对我来说是有用的,因为我试图发现重复项):
dups = PicKeyword.objects.values('keyword').annotate(Count('keyword')).filter(keyword__count__gt=1)
以下内容始终返回空查询集,不应返回:
dups = PicKeyword.objects.values('keyword','id').annotate(Count('keyword')).filter(keyword__count__gt=1)
希望有帮助