我想用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。
有什么建议吗?
答案 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')