Django вычисляет Avg для вычисленного поля

У меня есть модель, как показано ниже.

class Transaction(models.Model):

 time1 = models.DateTimeField(null=True)
 time2 = models.DateTimeField(null=True)

 @property
 def time_diff(self):
 return time2.total_seconds() - time1.total_seconds()

Мне нужно получить среднее значение (time2 - time1) в секундах для списка записей, если оба значения не равны нулю.

time_avg = transactions.aggregate(total=Avg('time_diff',field='time_diff'))

Это дает ошибку, говоря, что "time_diff" не является допустимым полем. Я хочу сохранить этот столбец как производное свойство. Не сохраненный столбец.

2 ответа

Сначала вам нужно найти разницу, а затем воспользоваться avarage. Вы можете использовать функцию django F для этого, как это.

from django.db.models import F 
result = Transaction.objects.filter('your_filter_here').annotate(time_diff=F('time1')-F('time2')).aggregate(Avg('time_diff'))


Ты пробовал

time_avg = transactions.aggregate(Avg('time_diff')).values()

licensed under cc by-sa 3.0 with attribution.