Выполните агрегатную функцию с объединением нескольких таблиц в 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

0 ответов

Другие вопросы по тегам