【问题标题】:Django getting percentage filtering the objectDjango获取百分比过滤对象
【发布时间】:2021-07-31 17:45:03
【问题描述】:

所以我有这两个模型:

class Freguesia(models.Model):
    nome = models.CharField("Freguesia",max_length=255)
class Intervencao(models.Model):
    freguesia = models.ForeignKey(Freguesia, on_delete=models.CASCADE, verbose_name="Freguesia")
     .........

我想在 html 中显示前 6 个 freguesias 以及更多 intervecao 以及它们的总百分比

我已经可以显示freguesias和他们拥有的干预数量,但我不知道如何显示百分比。

我的观点:

def DashboardView(request):
        freguesias = Freguesia.objects.annotate(num_intervencao=Count('intervencao')).order_by('-num_intervencao')[:6]
        context = {
            'freguesias':freguesias
        }

【问题讨论】:

    标签: django django-models django-views django-templates django-queryset


    【解决方案1】:

    你可以使用 Cast 和 F

    from django.db.models Count, F
    from django.db.models.functions import Cast
     
    freguesias = Freguesia.objects.annotate(
            num_intervencao=Count('intervencao'),
            total=Count('id')
        ).annotate(
            percentage=Cast(F('num_intervencao') * 100.0 / F('total'), FloatField())
        ).order_by('-num_intervencao')[:6]
    

    重要的是在单独的annotate 中计算百分比,而不是在计算依赖字段的地方。

    【讨论】:

    • 我认为您在 FoatField 附近还有一个 ) ,而且我拥有 100% 的所有百分比,但是 num_intervencao 正在工作
    • 我认为问题是 total=(Count('id')),因为我收到的是每个 **freguesia 的总数,而不是所有的总数 freguesias。但我已经让它工作了,谢谢你帮了我很多
    • 很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2021-11-28
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2010-11-04
    相关资源
    最近更新 更多