Django аннотирует средний запрос, не показывая десятичные разряды - PullRequest
1 голос
/ 26 мая 2019

Я работаю с Django, и я беру среднее для некоторых значений столбца, однако результат округляется, и я хотел бы сделать его одним или двумя десятичными знаками. Моя цель, чтобы результат выглядел как 3.5 вместо 4.

Моя модель называется Application, а столбцы имеют тип модели IntegerField. Моя база данных - PostgreSQL.

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

ratings = Application.objects.filter(id = review.id).annotate(rate = (F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6)

Я уже пробовал играть с FloatField s, но, возможно, я сделал это неправильно.

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

Заранее спасибо!

РЕДАКТИРОВАТЬ: Вот моя модель для столбцов.

col_1 = models.IntegerField(choices=USER_CHOICE)
...
col_6 = models.IntegerField(choices=USER_CHOICE)

1 Ответ

1 голос
/ 26 мая 2019

Вы можете использовать ExpressionWrapper [Django-doc] здесь, чтобы установить для FloatField [Django-doc] или DecimalField:

from django.db.models import <b>ExpressionWrapper</b>, FloatField

ratings = Application.objects.filter(id=review.id).annotate(
    rate=<b>ExpressionWrapper(</b>
        (F('col_1')+F('col_2')+F('col_3')+F('col_4')+F('col_5')+F('col_6'))/6,
        <b>output_field=FloatField()</b>
    <b>)</b>
)

В зависимости от ситуации, может быть лучше использовать FloatField или DecimalField [Django-doc] .

...