Django使用强制转换变量注释

时间:2018-06-25 19:49:57

标签: django django-models group-by django-queryset django-annotate

我想用Django queryset实现一些复杂的功能。 我的模型如下:

class Mymodel(models.Model):
    #Model Variables
    year = models.IntegerField()
    month = models.IntegerField()
    date = models.DateField(_("Date"), default=datetime.date.today)
    score = models.CharField(max_length=50)

不幸的是

  

分数不能从CharField()更改为FloatField()

,应将其保存为字符串。

我需要的是按年和月汇总所有分数。我尝试了类似的方法将所有分数分组,但均未获得成功。

values = Mymodel.objects.all().values(
    'year', 'month').annotate(Sum('score')).order_by('year', 'month')

我尝试通过注释在使用注释之前强制转换“分数”。

values = Mymodel.objects.all().annotate(
        scoreFloat=Cast('score', FloatField())
    ).values('year', 'month').annotate(
        Sum('scoreFloat')).order_by('year', 'month')

再次失败,因为我得到了ScoreFloat参数的KeyError。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在第二个查询中,应从第一个注释开始将值添加到新字段中:

Mymodel.objects.annotate(as_float=Cast('score', FloatField())
    ).values('year', 'month', 'as_float'
    ).order_by('year', 'month'
    ).annotate(sumscore=Sum('as_float')).values('year', 'month', 'sumscore')