将自我传递给在场内称为的功能

时间:2017-07-11 13:13:54

标签: python openerp odoo-9 odoo-10

我要做的是在字段内调用一个参数帮助的函数:

 class RouteLocation(models.Model):
      _name = 'route.location'

      time_change_comment = fields.Char()

      def time_change_comment(self):
          if self.time_change_comment:
             return self.time_change_comment
          else:
             return "Something else"

      time = fields.Datetime(help=time_change_comment(CAN't pass self here))

到目前为止,我试图用lambda做一点点,但我没有成功。

无论如何都要解决这种情况。谢谢你的时间:)

1 个答案:

答案 0 :(得分:0)

首先快速解释,然后我认为解决问题的方法。

  1. 您不需要将self传递给方法,它会被隐含地传递。但是......
  2. 需要 self来调用方法(如self.method_name()中所述),您可以将@classmethod添加到time_change_comment(BTW,可以你改变名称,以免它与上面的属性发生冲突?)但是你没有一个实例,你需要它来正确访问你的模型数据。
  3. 据我所知,使用lambdas会让你达到同样的目的。你如何捕获self
  4. 快速查看models.pyapi.py,似乎models.MetaModelapi.Meta都没有models.BaseModel中的初始化,所以@ criket_007说,使用__init__是您的最佳选择

      def __init__(self, pool, cr):
          # remember we changer the function time_change_comment's name
          self.time_change_comment.help = self.time_change_comment_fn()