Django - Можно ли использовать свойство как поле в функции агрегации?
Я знаю короткий ответ, потому что попробовал. Есть ли способ сделать это хотя (хотя бы из-за взлома)?
class Ticket(models.Model):
account = modelfields.AccountField()
uuid = models.CharField(max_length=36, unique=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['created']
@property
def repair_cost(self):
# cost is a @property of LineItem(models.Model)
return self.lineitem_set.aggregate(models.Sum('cost'))
Ответы
Ответ 1
Нет. Все, что проходит через встроенный менеджер, должно быть реальным полем, поскольку они касаются только базы данных. Чтобы работать с собственностью, им пришлось бы превратить каждую запись в таблицу в модель, а затем пропустить через них в Python.
Ответ 2
У меня есть аналогичный сценарий и вы хотите точно такую же функцию. Я решил это тривиально со следующей строкой:
...
return sum(lt.cost for lt in self.lineitem_set)