Джанго комментирует с приведенной переменной - PullRequest
0 голосов
/ 25 июня 2018

Я хочу добиться чего-то сложного с помощью набора запросов 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)

К сожалению,

оценка 'не может измениться с 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')

Еще раз безуспех, так как я получаю KeyError для параметра ScoreFloat.

Есть предложения?

1 Ответ

0 голосов
/ 25 июня 2018

Во втором запросе вы должны добавить к значениям новое поле из первого аннотации:

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')
...