Python django Model.objects.raw以十进制形式返回总和字段

Python django Model.objects.raw以十进制形式返回总和字段,python,django,django-models,Python,Django,Django Models,我有一个django模型,定义如下: class Foo(models.Model): bar = models.IntegerField(null=True) baz = models.ForeignKey(Baz) class Baz(models.Model): bat = models.IntegerField(null=True) sql = """ SELECT -1 AS id, SUM( foo.bar ) AS bar

我有一个django模型,定义如下:

class Foo(models.Model):
    bar = models.IntegerField(null=True)
    baz = models.ForeignKey(Baz)

class Baz(models.Model):
    bat = models.IntegerField(null=True)
sql = """
      SELECT -1 AS id,
      SUM( foo.bar ) AS bar
      FROM myapp_foo
      LEFT JOIN myapp_baz ON foo.baz_id = baz.id
      GROUP BY myapp_baz.id;
      """

aggregate_foo = Foo.objects.raw(sql)
我对它执行Foo.objects.raw()聚合查询,如下所示:

class Foo(models.Model):
    bar = models.IntegerField(null=True)
    baz = models.ForeignKey(Baz)

class Baz(models.Model):
    bat = models.IntegerField(null=True)
sql = """
      SELECT -1 AS id,
      SUM( foo.bar ) AS bar
      FROM myapp_foo
      LEFT JOIN myapp_baz ON foo.baz_id = baz.id
      GROUP BY myapp_baz.id;
      """

aggregate_foo = Foo.objects.raw(sql)
这一切都很好,但当我访问aggregate_foo.bar时,它会返回一个十进制而不是int!当然,我可以在事后将bar转换为int,但我更愿意用正确的方法

还有其他人遇到过django raw()函数的这个未记录的“特性”吗?有没有合适的方法来编写sql,以便它将SUM()字段作为int返回?我知道在上面的例子中我不需要执行原始查询,但是为了这个问题,让我们假设我不能使用Foo.objects.aggregate()


不知道这对这个问题是否至关重要,但我的数据存储是MySQL 5.5,它是MySQL的一个特性,而不是django。因此,在django中没有记录

对于数值参数,方差和标准偏差函数 返回一个双精度值。SUM()和AVG()函数返回一个十进制数 精确值参数(整数或十进制)的值,以及双精度 近似值参数的值(浮点或双精度)。(MySQL之前) 5.0.3,SUM()和AVG()为所有数值参数返回双精度。)

结果就是这样