我有一个定义如下的 django 模型:
class Foo(models.Model):
bar = models.IntegerField(null=True)
baz = models.ForeignKey(Baz)
class Baz(models.Model):
bat = models.IntegerField(null=True)
我对其执行 Foo.objects.raw() 聚合查询,如下所示:
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 时,它返回 Decimal 而不是 int!当然,我可以在事后将 bar 转换为 int ,但我宁愿以正确的方式这样做。
有没有其他人遇到过 django raw() 函数的这个未记录的“功能”?是否有正确的方法来编写 sql 以便它将 SUM() 字段作为 int 返回?我知道我不需要在上面的示例中执行原始查询,但是为了这个问题,我们假设我不能使用 Foo.objects.aggregate()
不知道这对这个问题是否至关重要,但我的数据存储是 MySQL 5.5