首页 > 解决方案 > 从 Django 函数返回标量

问题描述

我有一个愚蠢的问题

我真的希望下面返回一个数字,但它仍然返回一个可迭代的对象。你知道我怎样才能让它返回一个标量吗?

pts = skills.objects.filter(creator=request.user).raw('''SELECT sum(cast(points as int)) as id  FROM myapp_skills  WHERE status = 'closed' and creator = %s ''',[request.user.username])

这是我的技能模型:

class skills(models.Model):
    skill_name = models.CharField(max_length=400, default="data")
    points = models.CharField(max_length=400, default="data")
    time_required = models.CharField(max_length=400, default="data")
    target_date = models.CharField(max_length=400, default='none')
    category = models.CharField(max_length=400, default="data")
    status =  models.CharField(max_length=400, default="data")
    skill_id =  models.CharField(max_length=400, default="data")
    creator = models.CharField(max_length=400, default="data")
    syllabus = models.CharField(max_length=40000, default="data")

标签: django

解决方案


您可以进行如下所示的 ORM 查询:

from django.db.models import IntegerField, Sum
from django.db.models.functions import Cast

pts = skills.objects.filter(
    creator=request.user, status='closed'
).aggregate(
    total=Sum(Cast('points', output_field=IntegerField()))
)['total']

推荐阅读