Python 对多类Def函数求和以获得Django模型中的总数
我已经讨论了与我的问题相关的问题,但没有一个问题指向我的想法。我有不同的类模型,带有def函数。我可以得到每个模型的总金额,但我想得到的是,在得到每个模型的总金额后,我如何将所有模型相加,得到所有模型的总金额。下面是我的代码Python 对多类Def函数求和以获得Django模型中的总数,python,django,django-models,Python,Django,Django Models,我已经讨论了与我的问题相关的问题,但没有一个问题指向我的想法。我有不同的类模型,带有def函数。我可以得到每个模型的总金额,但我想得到的是,在得到每个模型的总金额后,我如何将所有模型相加,得到所有模型的总金额。下面是我的代码 class HomeOrderItem(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) home_ordered = mo
class HomeOrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
home_ordered = models.BooleanField(default=False)
item = models.ForeignKey(HomeItem, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
def get_total_item_price(self):
return self.quantity * self.item.home_price
def get_total_discount_price(self):
return self.quantity * self.item.home_discount_price
def get_final_price(self):
if self.item.home_discount_price:
return self.get_total_discount_price()
return self.get_total_item_price()
class HomeOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
home_items = models.ManyToManyField(HomeOrderItem)
date_created = models.DateTimeField(auto_now_add=True)
ordered_created = models.DateTimeField()
home_ordered = models.BooleanField(default=False)
def __str__(self):
return self.user.username
def get_total_everything(self):
total = 0
for order_item in self.home_items.all():
total += order_item.get_final_price()
return total
class MenOrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
men_ordered = models.BooleanField(default=False)
item = models.ForeignKey(MenItem, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
def get_total_item_price(self):
return self.quantity * self.item.men_price
def get_total_discount_price(self):
return self.quantity * self.item.men_discount_price
def get_final_price(self):
if self.item.men_discount_price:
return self.get_total_discount_price()
return self.get_total_item_price()
class MenOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
men_items = models.ManyToManyField(MenOrderItem)
date_created = models.DateTimeField(auto_now_add=True)
ordered_created = models.DateTimeField()
men_ordered = models.BooleanField(default=False)
def __str__(self):
return self.user.username
def get_total_men_everything(self):
total = 0
for order_item in self.men_items.all():
total += order_item.get_final_price()
return total
我希望能够将
def get_total_everything()+def get_total_men_everything()
相加以获得我的最终金额您可以在这些函数上方使用@staticmethod decorator,导入视图上的模型,然后您可以这样调用它:
sum=HomeOrderItem.get\u total\u item\u price()+HomeOrderItem.get\u total\u折扣\u price()+…等等
,你可以列出你想要的所有功能。非常感谢你的回复,我想我已经接近实现我的想法了,这一切都要感谢你。但是,当我按照您的指示执行操作时,出现了一个错误get\u total\u everything()
缺少1个必需的位置参数“self”。我认为这是由于我的模型中的get\u total\u everything(self)
导致的。当我尝试使用self时,即total\u total(用户,self)
我仍然会得到一个错误。。感谢您在这些函数中花费的时间,您是否尝试获得每个对象的总计?还是整个模型?我正试图分别将def get_total_everything
和def get_total_home_everything
添加到HomeOrder(models.model)
和MenOrder(models.model)
中。。。谢谢如果我理解你的意思,你需要先有object,例如:Obj=HomeOrder.objects.get(id=1),然后称之为Obj.get\u total\u everything,+将@staticmethod改为@property抱歉这么说,但我认为你误解了我的问题。从上面的代码中,我有了一个想法,类似于sum=Home order.get\u total\u everything()+MenOrder.order.get\u men\u total\u everything()
。这样,我将能够添加家庭订单和男人订单的总数。。。对不起,压力太大了,我很感激