Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对多类Def函数求和以获得Django模型中的总数_Python_Django_Django Models - Fatal编程技术网

Python 对多类Def函数求和以获得Django模型中的总数

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

我已经讨论了与我的问题相关的问题,但没有一个问题指向我的想法。我有不同的类模型,带有def函数。我可以得到每个模型的总金额,但我想得到的是,在得到每个模型的总金额后,我如何将所有模型相加,得到所有模型的总金额。下面是我的代码

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()
。这样,我将能够添加家庭订单和男人订单的总数。。。对不起,压力太大了,我很感激