Кастинг внутри запроса в 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?