【问题标题】:How can I reduce method lines to a loop?如何将方法行减少为循环?
【发布时间】:2020-03-22 02:31:02
【问题描述】:

我怎样才能将我的代码留在一个循环中?它限制了我这样做,因为它们具有不同的定义,所以我无法减少代码行。

  input_quantity= fields.Float(string="input_quantitya", compute="input_quantity")
  @api.one
  @api.depends ("detail_book_ids")
  def _stock_entry (self):
      sum = 0
      for detail_book in self.detail_book_ids:
          sum + = book_detail.quantity_debted
      self.input_quantity = sum

  merge_number= fields.Float(string="merge_number", compute="_stock_merma")    
  @api.one
  @api.depends ("detail_book_ids")
  def _stock_merma (self):
      sum = 0
      for detail_book in self.detail_book_ids:
          sum + = detail_book.quantity_merm
      self.merge_number = sum

  output_quantity= fields.Float(string="output_quantity", compute="_stock_output")
  @api.one
  @api.depends ("detail_book_ids")
  def _stock_output (self):
      sum = 0
      for detail_book in self.detail_book_ids:
          sum + = book_detail.quantity_to have
      self.output_quantity = sum

我需要这样做,因为这就是我收到以下错误的原因: RecursionError:调用 Python 对象时超出了最大递归深度。

计算库存的字段如下

  stock= fields.Float(string="stock", compute="_stock")
  @api.one
  @api.depends('input_quantity','output_quantity','existencia','merge_numbe')
  def _stock(self):
      for rec in self:
          rec.stock = rec.existencia + (rec.input_quantity - (rec.output_quantity + rec.merge_numbe))

照片中的错误是:

【问题讨论】:

  • 请添加错误日志?
  • 它没有向我显示比上述错误更多的错误,但它仅在我选择合并时发生,因为与其他错误相比,它会增加和减少库存

标签: python odoo-12


【解决方案1】:

你好弗朗西斯科·冈萨雷斯·梅亚斯,

以这种方式优化方法,只需为你的所有领域调用一个方法与减少线。

@api.multi
def _compute_common_funtion(self):
    self.input_quantity = sum(self.mapped('detail_book_ids').mapped('quantity_debted'))
    self.merge_number = sum(self.mapped('detail_book_ids').mapped('quantity_merm'))
    self.output_quantity = sum(self.mapped('detail_book_ids').mapped('quantity_to'))

谢谢

【讨论】:

  • 在变量 input_quantity、merge_number 和 output_quantity 中我必须放置相同的计算域?
  • 我这样做了,但是在另一个计算变量中,我计算库存不会减去或增加产品的库存
  • @FranciscoGonzálezMejías 是的,所有三个字段都有一个方法执行。
  • @FranciscoGonzálezMejías 您目前面临的问题以及您的第二条评论要实现的目标或面临的问题或错误不太清楚。
【解决方案2】:

您可以像他们在sale module 中那样做。

@api.depends("detail_book_ids")
def _amount_all(self):
    for stock_entry in self:
        input_quantity = merge_number = output_quantity = 0.0
        for detail_book in stock_entry.detail_book_ids:
            input_quantity += detail_book.quantity_debted
            merge_number += detail_book.quantity_merm
            output_quantity += detail_book.quantity_to_have

        # 1 database update
        stock_entry.update({
            'input_quantity': input_quantity,
            'merge_number': merge_number,
            'output_quantity': output_quantity,
        })

您可以像以前一样保留@api.one,并删除_compute_all 方法中的第一个循环,然后将stock_entry 重命名为self

编辑

您有一个依赖于其他计算字段的字段,如果您引用会计发票_compute_amount 方法,则可以使用相同的方法并在装饰器中添加新的 depandeances。

@api.one
@api.depends('detail_book_ids', 'existencia')
def _amount_all(self):
    input_quantity = merge_number = output_quantity = 0.0
    for detail_book in self.detail_book_ids:
        input_quantity += detail_book.quantity_debted
        merge_number += detail_book.quantity_merm
        output_quantity += detail_book.quantity_to_have

    self.input_quantity = input_quantity
    self.merge_number = merge_number
    self.output_quantity = output_quantity
    self.stock = self.existencia + (input_quantity - (output_quantity + merge_number))

【讨论】:

  • 我这样做了,但是在另一个计算变量中,我计算库存不会减去或增加产品的库存
  • 哪个变量?
  • 添加上面我用来计算库存的方法
  • 用同样的方法计算stock字段,检查我的编辑。
  • 没有案例不断收到 RecursionError 错误:调用 Python 对象时超出了最大递归深度
猜你喜欢
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多