Перейти к содержимому
Меню
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Этот вопрос был отмечен
2 Ответы
740 Представления

Dear All,


I am trying to add a field in purchases to display all the Partners from the Sale Orders that are linked to the Purchase.


I have the following code, and I am facing an issue:


When I do not use “store=True“ the function works correctly and displays the partners. However, in order to save the Partners in Purchases that are not linked to any sale order (since I have a compute method in my field), I set “store=True“ but then the first case does not work.


In other words, when I do not use store, the function works correctly and the customer is displayed. However, when I set store, the function does not work, and the related partners do not appear, although the new partners are saved correctly in the Purchase.


What am I missing, and how can I fix this?

class PurchaseOrder(models.Model):
_inherit = 'purchase.order'

name_ids = fields.Many2many(comodel_name='res.partner',compute='_compute_customer_names',
string="Customers",store=True)

def _compute_customer_names(self):
for purchase in self:
sale_order_ids = purchase._get_sale_orders()
for sale_order in sale_order_ids:
purchase.name_ids = sale_order.partner_id
Аватар
Отменить
Лучший ответ

Hello,

if you want to store the field in DB with store =True result you must to to specify the dependencies on the compute method with the decorator depends()

Thanks.

Аватар
Отменить
Автор

I had tried using 'depends()' as well, but it still didn't work.

The value of a computed field usually depends on the values of other fields so you need to specify these fields in @api.depends() so if any of these fields in changed then the computed field will be recomputed again.

If you added the property store=True to the field which already created, It will not be recomputed. Try to test it with creating a new purchase order after adding @api.depends()

Лучший ответ

Hi,


If you want to store a computed field in the database, the field must depend on one or more other fields (via @api.depends).

Try the following code


class PurchaseOrder(models.Model):
_inherit = 'purchase.order'

name_ids = fields.Many2many(comodel_name='res.partner',compute='_compute_customer_names',
string="Customers",store=True)

@api.depends('order_line.sale_order_id')
def _compute_customer_names(self):
for purchase in self:
sale_order_ids = purchase._get_sale_orders()
if sale_order_ids:
for sale_order in sale_order_ids:
purchase.name_ids = sale_order.partner_id
else:
purchase.name_ids = None

Hope it helps

Аватар
Отменить
Related Posts Ответы Просмотры Активность
0
авг. 19
5341
compute issue Решено
1
мая 21
3592
2
июн. 20
6301
1
нояб. 24
1004
2
авг. 22
5106