Выполните агрегатную функцию с объединением нескольких таблиц в django
Я очень новичок в django и пытаюсь написать небольшое приложение.
У меня есть три класса моделей, как показано ниже
class A(models.Model):
account_id = models.AutoField(primary_key=True)
account_number = models.CharField(max_length=25)
def getCurrentBalance(self):
total = 0
for row in self.A_C.all().values('t_name').annotate(total_qty=Sum(F('quantity')*F('B_DATA.t_price'))):
print(row)
return total
class B(models.Model):
t_name = models.CharField(primary_key=True, max_length=10)
t_price = models.DecimalField(max_digits=20, decimal_places=4)
class C(models.Model):
t_name = models.ForeignKey(B, models.DO_NOTHING, db_constraint=False, , related_name='B_DATA')
account = models.ForeignKey(A, models.DO_NOTHING, related_name='A_C')
quantity = models.DecimalField(max_digits=20, decimal_places=4)
transaction_date = models.DateField()
Я пытаюсь написать метод в моем классе модели A для агрегирования значений из его отношения B, которое, в свою очередь, снова связано с моделью C.
Мне трудно написать запрос, чтобы сделать что-то, что выглядело бы ниже в простом SQL.
select c.t_name,SUM(c.quantity * b.t_price) from C c, B b
where c.t_name = b.t_name
group by c.t_name
Я могу получить нужное мне значение, используя отдельный запрос (показан ниже), но я уверен, что у django есть лучший способ сделать это в одном запросе.
self.A_C.all()[0].t_name.t_price