Django 获取百分比过滤对象
Django getting percentage filtering the object
所以我有这两个模型:
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 和他们拥有的 intervencoes 数量,但我不知道如何显示百分比。
我的看法:
def DashboardView(request):
freguesias = Freguesia.objects.annotate(num_intervencao=Count('intervencao')).order_by('-num_intervencao')[:6]
context = {
'freguesias':freguesias
}
您可以使用 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
中计算百分比,而不是在计算依赖字段的地方。
所以我有这两个模型:
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 和他们拥有的 intervencoes 数量,但我不知道如何显示百分比。
我的看法:
def DashboardView(request):
freguesias = Freguesia.objects.annotate(num_intervencao=Count('intervencao')).order_by('-num_intervencao')[:6]
context = {
'freguesias':freguesias
}
您可以使用 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
中计算百分比,而不是在计算依赖字段的地方。