Я пытаюсь сделать этот расчет: разделите стоимость на отрезок времени (скажем, 12 месяцев), чтобы получить месячную стоимость. Я могу вернуть значение из БД, но я делаю это совершенно неправильно, и я застрял. Я также попытался использовать аннотацию вместо агрегата без удачи.
Из views.py
def dashboard(request):
total_cost = Apprentice.objects.all().aggregate(Sum('cost__cost'))['cost__cost__sum']
monthly_cost = Apprentice.objects.all().aggregate(Sum('p_time__duration'))['p_time__duration__sum']
return render(request, 'dashboard.html', {'total_cost': total_cost, 'monthly_cost': monthly_cost})
Из шаблона
<div class="card">
<div class="card-body">
<h5 class="card-title">Total monthly spend</h5>
<p class="card-text"><strong></strong>£{{ monthly_cost | intcomma }}</strong></p>
</div>
</div>
Из models.py
from django.db import models
from django.utils import timezone
class Division(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Department(models.Model):
name = models.CharField(max_length=255, unique=True)
division = models.ForeignKey(Division, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Programme(models.Model):
p_name = models.CharField(max_length=255, unique=True)
def __str__(self):
return self.p_name
class ProgrammeDuration(models.Model):
program = models.ForeignKey(Programme, unique=True,
on_delete=models.CASCADE)
duration = models.IntegerField()
def __str__(self):
return str(self.duration)
class Cost(models.Model):
p_name = models.ForeignKey(Programme, related_name='cost',
on_delete=models.CASCADE)
cost = models.IntegerField()
def __str__(self):
return str(self.cost)
class Apprentice(models.Model):
name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
role = models.CharField(max_length=255)
p_name = models.ForeignKey(Programme, related_name='name',
on_delete=models.CASCADE)
p_time = models.ForeignKey(ProgrammeDuration, on_delete=models.CASCADE)
dept = models.ForeignKey(Department, on_delete=models.CASCADE)
div = models.ForeignKey(Division, on_delete=models.CASCADE)
cost = models.ForeignKey(Cost, on_delete=models.CASCADE)
date_created = models.DateTimeField(default=timezone.now)
on_course = models.BooleanField(null=True)
left_course = models.BooleanField(null=True)
start_date = models.DateTimeField(null=True)
finish_date = models.DateTimeField(null=True)
notes = models.TextField(null=True)
def __str__(self):
return self.name
Ввод из дБ
Rendered html
Таким образом, я пытаюсь разделить стоимость на продолжительность в месяцах, чтобы вернуть ежемесячную стоимость.