【问题标题】:Python in django models.pydjango models.py 中的 Python
【发布时间】:2013-01-17 20:23:25
【问题描述】:

这适用于 python IDLE

class A:
    b = 0

    def __init__(self, value):
        self.b = value

obj1 = A(1)
obj2 = A(2)
obj3 = A(3)
k = [obj1, obj2, obj3]
result = sum(i.b for i in k)
print str(result)

但这不适用于 django/python

from django.db import models

class Flatbar(models.Model):
    width = models.IntegerField()
    height = models.IntegerField()

    def Area(self):
        return self.width * self.height

class Section(models.Model):
    flatbars = models.ManyToManyField(Flatbar)

    def Area(self):
        return str(sum(f.Area for f in self.flatbars))

为什么这不起作用,我将如何使用 lambda 函数来做到这一点?

【问题讨论】:

  • “不工作”是什么意思?你得到什么错误?

标签: python django lambda sum


【解决方案1】:

ManyToManyField 的属性产生一个管理器,而您将 Area 设置为一个方法。

return str(sum(f.Area() for f in self.flatbars.all()))

【讨论】:

  • 您对经理 .all() 的看法可能是正确的,但我已经尝试过了,但它不起作用 =[
  • 抱歉我的编辑.. 我不知道你能做到这一点!好吧,在这种情况下,这应该逐字使用 Pizzaguru。确保您正在替换正确的方法。
  • 像魅力一样工作!非常感谢
  • 还有一件事:AFAIK,根据python约定,只有类名大写,方法名不大写。我将 Area 方法重命名为 area(self)
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 2019-01-11
  • 2016-11-11
  • 2010-10-22
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 2011-04-10
相关资源
最近更新 更多