我有一个名为Animal的模型,其中包含一个名为text
的字段,该字段以动物名称开头,后跟可选文本,例如,cat - grey long hair
class Animal:
text = models.TextField()
字符串
动物的一些例子包括:
animal1 = Animal()
animal1.text = "cat - grey long hair cat."
animal1.save()
animal2 = Animal()
animal2.text = "dog - black short hair dog."
animal2.save()
animal3 = Animal()
animal3.text = "non descriptive animal"
animal3.save()
型
我想计算以cat
、dog
或fish
开头的text
的出现次数,并返回每个动物类别的计数。我假设如下:
queryset = models.Animal.objects.all()
animal_summary = (
queryset
.annotate(
cats=Count(
Case(
When(text__startswith="cats", then=1),
default=0,
output_field=IntegerField(),
)
)
)
.annotate(
dogs=Count(
Case(
When(text__startswith="dogs", then=1),
default=0,
output_field=IntegerField(),
)
)
)
.annotate(
fish=Count(
Case(
When(text__startswith="fish", then=1),
default=0,
output_field=IntegerField(),
)
)
)
.values('cats', 'dogs', 'fish')
)
return {"animal_count": animal_summary}
型
但它似乎会计算条目的数量,而不考虑子字符串。
1条答案
按热度按时间4uqofj5v1#
我可以用aggregation提供一个选项。我把这些行写进我的模型中,并计算出匹配的行。
字符串
输入:
型
输出量:
型