Django/Python – запрос вычисляемого поляPython

Программы на Python
Ответить
Anonymous
 Django/Python – запрос вычисляемого поля

Сообщение Anonymous »

У меня есть приведенные ниже модели, и я хочу выполнить расчет по внешнему ключу распределения, а затем просуммировать суммы.

Код: Выделить всё

class Fundraising(models.Model):
@property
def amount_raised(self):
amount_raised = FundraisingDonation.objects.filter(
fundraising_event=self,
).aggregate(donationamount=Coalesce(Sum('donationamount'), 0.00))['donationamount']
return amount_raised

class FundraisingDonation(models.Model):
donationamount = models.DecimalField(max_digits=11, decimal_places=2, default=0)

class Testmodel(models.Model):
organisation = models.ForeignKey(Organisation, on_delete=models.CASCADE)
allocation = models.ForeignKey(Fundraising, on_delete=models.CASCADE, related_name='items')
percentshare = models.DecimalField(max_digits=11, decimal_places=2, default=0) #SET BY USER

@property
def amount(self):
amount = self.allocation.amount_raised * self.percentshare
return amount
Свойство модели «сумма», указанное выше, вычисляет поле суммы для каждого экземпляра модели.

Я пытаюсь теперь суммируем суммы для каждой организации по новой модели, однако следующее не работает, поскольку я не верю, что смогу выполнить запрос по вычисляемому полю?

Код: Выделить всё

class Totals(models.Model):
totals = total + totalB + totalC
@property
def total(self):
total = Testmodel.objects.filter(
organisation=self.organisation
).aggregate(amount=Coalesce(Sum('amount'), 0.00))['amount']
Можно ли как-нибудь изменить последнюю строку, чтобы это работало, или повторить расчет в этой строке? Я также попробовал агрегат(Sum(amount_raising * процентная доля)), но это тоже не сработало?

Подробнее здесь: https://stackoverflow.com/questions/618 ... ated-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»