1

For example, i have DICT datas with some lines in there. I want to update record lines in other model and i use this code. Other models record have some lines init and i want to add new lines from DATAS. my code just overwrites lines that already there. how can i add to existing lines, and not overwriting?

 datas = safe_eval(self.datas)
 domain = [('quatation_id', '=', self.id)]
 shoes = self.env['shoes.order'].search(domain, limit=1)
 for line in datas['lines']:
                    line = line and line[2]
                    vals = {
                        u'product_id': line.get('product_id'),
                        u'amount_total': line.get('price'),

                    }

                shoes.service_ids.write(vals)



class ShoesOrderService(models.Model):
    _name = 'shoes.order.service'
    _rec_name = 'product_id'

    product_id = fields.Many2one(
        'product.product', 'Service',
        domain=[('type', '=', 'service')],
    )
    price = fields.Float()
    order_id = fields.Many2one(
        'shoes.order', 'Shoes Order')

 class ShoesOrder(models.Model):

_name = 'shoes.order'

 service_ids = fields.One2many(
    'shoes.order.service', 'order_id', string='Additional Services',
    copy=True
Chaban33
  • 1,362
  • 11
  • 38

1 Answers1

2

When you are running write on any x2many field, you are saying "This is the only thing that should be on that field. Erase anything else."

You want to add additional lines, so you must fill the field by using the method described here.

shoes.service_ids = [(4, {ID of record to link})]
travisw
  • 2,052
  • 1
  • 14
  • 27