Django 用铸造变量注释
Django annotate with casted variable
我想用 Django 查询集实现一些复杂的东西。
我的模型如下所示:
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)
不幸的是,
score' can't change from CharField() to FloatField()
,它应该保留为一个字符串。
我需要的是按年和月对所有分数求和。我尝试过类似的方法来对所有分数进行分组,但没有取得太大的成功。
values = Mymodel.objects.all().values(
'year', 'month').annotate(Sum('score')).order_by('year', 'month')
我试图通过这样做在使用注释之前投射 'score'。
values = Mymodel.objects.all().annotate(
scoreFloat=Cast('score', FloatField())
).values('year', 'month').annotate(
Sum('scoreFloat')).order_by('year', 'month')
再次没有成功,因为我收到 scoreFloat 参数的 KeyError。
有什么建议吗?
在您的第二个查询中,您应该将第一个注释中的新字段添加到值中:
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')
我想用 Django 查询集实现一些复杂的东西。 我的模型如下所示:
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)
不幸的是,
score' can't change from CharField() to FloatField()
,它应该保留为一个字符串。
我需要的是按年和月对所有分数求和。我尝试过类似的方法来对所有分数进行分组,但没有取得太大的成功。
values = Mymodel.objects.all().values(
'year', 'month').annotate(Sum('score')).order_by('year', 'month')
我试图通过这样做在使用注释之前投射 'score'。
values = Mymodel.objects.all().annotate(
scoreFloat=Cast('score', FloatField())
).values('year', 'month').annotate(
Sum('scoreFloat')).order_by('year', 'month')
再次没有成功,因为我收到 scoreFloat 参数的 KeyError。
有什么建议吗?
在您的第二个查询中,您应该将第一个注释中的新字段添加到值中:
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')