Python 如何在Django中获得同一类以前对象的总值?
我用Django编写了自己的计费软件。我有一个叫做比尔的模型。每一张账单都有价格价值。现在我想给bill模型一个函数,它将所有以前的bill和当前bill的价格值相加。这个函数的目的是给我一个我迄今为止挣了多少钱的数字 但每次我尝试实现它时,我都会遇到一个问题,即我不能在其自身的定义中使用bill类Python 如何在Django中获得同一类以前对象的总值?,python,django,Python,Django,我用Django编写了自己的计费软件。我有一个叫做比尔的模型。每一张账单都有价格价值。现在我想给bill模型一个函数,它将所有以前的bill和当前bill的价格值相加。这个函数的目的是给我一个我迄今为止挣了多少钱的数字 但每次我尝试实现它时,我都会遇到一个问题,即我不能在其自身的定义中使用bill类 向我的bill类中添加一个函数以获取所有bill对象(包括当前对象)并将价格值相加的最佳方法是什么?我感觉到我误解了一些东西,但为什么不这样做呢 class Bill(models.Model):
向我的bill类中添加一个函数以获取所有bill对象(包括当前对象)并将价格值相加的最佳方法是什么?我感觉到我误解了一些东西,但为什么不这样做呢
class Bill(models.Model):
due_date = models.DateField()
price = models.IntegerField()
paid = models.BooleanField()
def get_previous_bills(self):
return Bill.objects.filter(due_date__lte=timezone.now(), paid=True)
def get_total_price(self):
return sum(p.price for p in self.get_previous_bills())
您是否使用Django ORM将账单存储在数据库中?如果是这样,请使用ORM查询DB以获取所有账单:。但如果我在bill类中执行Rechnung.objects.filter(nummer>=self.nummer)(nummer是一个id,Rechnung表示账单),则表示未定义nummer。在这个类之外,代码按预期工作。请参阅我的评论,使用
nummer\uu gte=self.nummer
。这是在运行时计算的,因此如果您已将nummer字段设置为值,则不应看到此错误。如果您需要更多帮助,请使用您尝试过的简化版本更新您的Q。@JasonTS而不是此Rechnung.objects.filter(nummer>=self.nummer)
,您必须编写类似的内容,Rechnung.objects.filter(nummer\uu gte=self.nummer)
。请记住,Django与常规Python没有什么不同:方法调用(如filter
)采用普通的关键字样式参数:在本例中,键是nummer\uu gte
,值是self.nummer
。该键有效地使用了一种特殊的Django语法,告诉ORM您希望使用=
运算符将每个Rechnung的numer属性与您传递的值进行比较。在这种情况下,您可能应该使用Manager,并在该Manager中具有get_previous_bills函数。然后,您可以使用self.objects.filter(due\u date\u lte=timezone.now(),paid=True)和call Bill.objects.get\u previous\u bills()@MarioGudelj interest-我对Django很陌生,所以我很少与定制经理打交道。与静态方法相比,使用管理器的优势是什么?