Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
2 Odpowiedzi
719 Widoki

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
Awatar
Odrzuć
Najlepsza odpowiedź

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.

Awatar
Odrzuć
Autor

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

Najlepsza odpowiedź

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

Awatar
Odrzuć
Powiązane posty Odpowiedzi Widoki Czynność
0
sie 19
5332
compute issue Rozwiązane
1
maj 21
3589
2
cze 20
6295
1
lis 24
1001
2
sie 22
5098