Django的注释Count with division返回整数而不是float

Max*_*ore 5 django django-orm django-annotate

我有很多对象,其中3个有name ='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)
Run Code Online (Sandbox Code Playgroud)

我明白了:

3, 'AAA'
1, 'BBB'
...
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是当我尝试添加一些公式来注释Count()时:

my_models = MyModel.objects.order_by('name').values('name').annotate(count=Count('name') / 2)
Run Code Online (Sandbox Code Playgroud)

我明白了:

1, 'AAA'
0, 'BBB'
...
Run Code Online (Sandbox Code Playgroud)

但预计:

1.5, 'AAA'
0.5, 'BBB'
...
Run Code Online (Sandbox Code Playgroud)

编辑:

Python部门与SQL部门通过Django的ORM不同,因此python 3中的2/1返回2.0 - OK,但不在SQL中

Udi*_*Udi 8

完整回答@Alasdair的评论:

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()))
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用:返回0.0,但必须为0.8 (2认同)
  • @rluts ,首先尝试转换两个变量,例如 total=Cast(Count('id'), FloatField() / Cast(Count('id'), FloatField()) (2认同)