Odoo - может ли метод записи вызвать утечку памяти при использовании 5 и 3 команд? - PullRequest
1 голос
/ 04 августа 2020

Мне интересно, может ли неправильно используемый метод write привести к «утечке памяти».

Предположим, у меня есть какой-то ордер на продажу, который мне нужно пересчитать. Поэтому я бы удалил все предыдущие строки заказа, а затем в al oop я бы создал новые строки вроде этого:

sale_order.write({'order_line':[(5, 0, 0)]}) # Remove all previous products

vals = []
for product in new_products:
    vals.append((0, 0, {'product_id': product.id, 'product_uom_qty': product.qty, …})) # Create new lines

sale_order.write({'order_line':vals}) # Add new lines

Но в документации говорится, что (5, 0, 0) эквивалентно вызову (3, id, 0) для каждого идентификатора, и что эта команда не удаляет записи из базы данных (только (2, id, 0) делает).

Итак, если я правильно понимаю, если бы я запустил этот код пару раз в конце, я бы остаться с множеством строк, которые не соответствуют какому-либо порядку и просто существуют в базе данных?

Если да, то как мне сделать это, чтобы не вызвать эту утечку? Нужно ли мне использовать 2 вместо 3/5 команд?

Использование Odoo13.

1 Ответ

2 голосов
/ 04 августа 2020

Просто введите unlink в поле строки заказа:

sale_order.order_line.unlink()
...