Как сделать total на Django models.p

Я пытаюсь получить общее количество, но я не знаю, почему я не получаю общее количество, и у меня есть код models.py и его вывод

class Order(models.Model):
     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
     items = models.ManyToManyField(OrderItem)
     start_date = models.DateTimeField(auto_now_add=True)
     table_num = models.CharField(max_length=50)
     ordered_date = models.DateTimeField()
     ordered = models.BooleanField(default=False)

     def __str__(self):
         return self.user.username
    
     def total(self):
        total = 0 
        for order_item  in self.items.all():
            total += order_item.get_total_item_price()
            return total

enter image description here

enter image description here

Python Typo. Ошибка в отступах. Должно быть

    for order_item  in self.items.all():
        total += order_item.get_total_item_price()
    return total

Вы сразу возвращаете результат после первой итерации, вам следует использовать:

def total(self):
    total = 0 
    for order_item in self.items.all():
        total += order_item.get_total_item_price()
    return total

или с sum(…):

def total(self):
    return sum(order_item.get_total_item_price() for order_item in self.items.all())

Но лучше всего, вероятно, работать с .aggregate(…) [Django-doc].

Вернуться на верх