如何在 Django 上做总计 models.py
How to do total on Django models.py
我想得到总数,但我不知道为什么我没有得到总数,我有 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
Python 打字错误。缩进错误。应该是
for order_item in self.items.all():
total += order_item.get_total_item_price()
return total
你在第一次迭代后立即return结果,你应该使用:
def total(self):
total = 0
for order_item in self.items.all():
total += order_item.get_total_item_price()
<strong>return total</strong>
或 sum(…)
:
def total(self):
return <strong>sum(</strong>order_item.get_total_item_price() for order_item in self.items.all()<strong>)</strong>
但最好的方法可能是使用 .aggregate(…)
[Django-doc]。
我想得到总数,但我不知道为什么我没有得到总数,我有 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
Python 打字错误。缩进错误。应该是
for order_item in self.items.all():
total += order_item.get_total_item_price()
return total
你在第一次迭代后立即return结果,你应该使用:
def total(self):
total = 0
for order_item in self.items.all():
total += order_item.get_total_item_price()
<strong>return total</strong>
或 sum(…)
:
def total(self):
return <strong>sum(</strong>order_item.get_total_item_price() for order_item in self.items.all()<strong>)</strong>
但最好的方法可能是使用 .aggregate(…)
[Django-doc]。