Django 用除法 returns 整数而不是浮点数注释 Count
Django's annotate Count with division returns integer instead of float
我有很多对象,其中 3 个有名称='AAA'
我按 'name' 对它们进行分组并在组中注释 num:
my_models = MyModel.objects.order_by('name').values('name').annotate(count=Count('name'))
for i in my_models:
print(i.count, i.name)
我得到:
3, 'AAA'
1, 'BBB'
...
一切都很好,但是当我尝试添加一些公式来注释 Count() 时:
my_models = MyModel.objects.order_by('name').values('name').annotate(count=Count('name') / 2)
我得到:
1, 'AAA'
0, 'BBB'
...
但预期:
1.5, 'AAA'
0.5, 'BBB'
...
编辑:
Python除法不同于SQL除法通过Django的ORM,
所以 2/1 in python 3 returns 2.0 - 好的,但不是 SQL
之后的完整答案:
from django.db.models import FloatField
from django.db.models.functions import Cast
qs = MyModel.objects.order_by('name').values('name').annotate(
count=Cast(Count('name') / 2.0, FloatField()))
我有很多对象,其中 3 个有名称='AAA'
我按 'name' 对它们进行分组并在组中注释 num:
my_models = MyModel.objects.order_by('name').values('name').annotate(count=Count('name'))
for i in my_models:
print(i.count, i.name)
我得到:
3, 'AAA'
1, 'BBB'
...
一切都很好,但是当我尝试添加一些公式来注释 Count() 时:
my_models = MyModel.objects.order_by('name').values('name').annotate(count=Count('name') / 2)
我得到:
1, 'AAA'
0, 'BBB'
...
但预期:
1.5, 'AAA'
0.5, 'BBB'
...
编辑:
Python除法不同于SQL除法通过Django的ORM, 所以 2/1 in python 3 returns 2.0 - 好的,但不是 SQL
from django.db.models import FloatField
from django.db.models.functions import Cast
qs = MyModel.objects.order_by('name').values('name').annotate(
count=Cast(Count('name') / 2.0, FloatField()))