Кастинг внутри запроса в django

У меня есть модель с двумя свойствами

class Player(models.Model):
    username = models.CharField(max_length=200, unique=True)
    score = models.CharField(max_length=50)

Я хочу, чтобы счет оставался полем CharField, но теперь я хочу усреднить счет всех игроков с помощью простого запроса, подобного этому

Player.objects.aggregate(Avg('score'))

Это не сработает, потому что "score" - это CharField и его нужно сначала привести к float. Как мне сделать это на лету? Заранее спасибо.

Я думаю, что вы можете использовать "Cast" следующим образом :

from django.db.models.functions import Cast
Player.objects.annotate(score_as_float=Cast('score', 
output_field=FloatField()).aggregate(Avg('score_as_float'))

Источник : https://docs.djangoproject.com/en/4.0/ref/models/database-functions/#cast

Как сделать запрос суммы с приведением типов и вычислением в представлениях django?

Вернуться на верх