【问题标题】:Summing up multiple class Def function to get total amount in Django models总结多个类 Def 函数以获取 Django 模型中的总量
【发布时间】:2021-01-02 00:44:22
【问题描述】:

我已经完成了与我的问题相关的问题,但没有一个指向我的想法。我有不同的类模型,带有 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 () 相加得到我的最终金额

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    您可以在这些函数上方使用@staticmethod 装饰器,在视图上导入模型,然后您可以这样调用它: sum = HomeOrderItem.get_total_item_price() + HomeOrderItem.get_total_discount_price() + ...etc,你可以列出你想要的所有功能。

    【讨论】:

    • 非常感谢您的回复,我想我已经非常接近实现我的想法了,多亏了您。但是,当我按照您的指示进行操作时,我收到错误 get_total_everything() 缺少 1 个必需的位置参数“self”。我认为这是我的模型中get_total_everything(self) 的结果。当我尝试拥有自我时,即total_total(user,self) 我仍然得到一个错误.. 感谢您的时间
    • 在这些函数中,您是否尝试计算每个对象的总数?还是整个模型?
    • 我正在尝试分别在HomeOrder(models.Model)MenOrder(models.Model) 中添加def get_total_everythingdef get_total_home_everything...谢谢
    • 如果我理解你的话,你需要先有对象例如:Obj = HomeOrder.objects.get(id=1) 然后将其称为 Obj.get_total_everything,+ 将@staticmethod 更改为@property
    • 很抱歉这么说,但我认为你的问题弄错了。从上面的代码中,我有了一个想法,比如sum=Home order.get_total_everything() + MenOrder.order.get_men_total_everything()。这样一来,我就可以将家庭订单和男士订单的总数相加......抱歉压力很大,我很感激
    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多