Как я могу уменьшить количество строк метода до oop? - PullRequest
0 голосов
/ 21 марта 2020

как я могу оставить свой код в одном l oop? Это ограничивает меня в этом, потому что они имеют разное определение, поэтому я не могу уменьшить строку кода.

  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))

ошибка на фотографии: photoerror

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Здравствуйте, Франсиско Гонсалес Мехиас,

Оптимизируйте метод таким образом, просто вызвали метод one для всего вашего поля с линией сокращения.

@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'))

Спасибо

0 голосов
/ 21 марта 2020

Вы можете сделать это так, как они это сделали в модуль продажи .

@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, как вы сделали, и удалить первый l oop в методе _compute_all, затем переименовать stock_entry в self.

Редактировать :

У вас есть поле, которое зависит от других вычисляемых полей, и если вы ссылаетесь на счет-фактуру _compute_amount метод, способ сделать это использовать тот же метод и добавить новые depandends в декораторе.

@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))
...