Вы можете использовать метод свойств в ваших Jobgrade
и Employee
классах моделей, таких как:
class Jobgrade(models.Model):
...
@property
def average_time(self):
# gets average time of of a Jobgrade
return self.contract_set.all().annotate(diff=F('contract_start')-F('contract_end')).aggregate(avg=Avg('diff'))['avg']
class Employee(models.Model):
...
@property
def get_length(self):
# gets sum time of of a Employee
return self.contract_set.all().annotate(diff=F('contract_start')-F('contract_end')).aggregate(sum=Sum('diff'))['sum']
Здесь я использую , комментируя разницу между двумя значениями, используя F выражение.Тогда я использовал агрегацию , чтобы получить сумму и среднее .
Теперь вы можете использовать эти значения в шаблоне как:
{% for employee in Employee.objects.all %}
{{ employee.get_length }}
{% endfor %}
{% for job in Jobgrade.objects.all %}
{{ job.average_time }}
{% endfor %}