Estoy haciendo mi propia lista usando el archivo list_editable_renderer.js y extendiendo el widget one2many de acuerdo a mis necesidades, ahora quiero poner un botón de agregar al crear un registro en el campo attribute_line_ids , actualmente Odoo guarda cuando se hace clic en el botón Guardar pero it ¿Qué quiero guardar cuando hago clic en mi nuevo botón?
Mi xml:
<field name="attribute_line_ids" widget="table_one2many" context="{'show_attribute': False}" attrs="{'invisible':[('has_variants','=', False)]}" > <tree string="Variants" editable="top" multi_edit="1" options="{'only_one_row': 'True', 'add_record_button': 'True'}" > <field name="attribute_id" attrs="{'readonly': [('id', '!=', False)]}" string="Opción"/> <field name="value_ids" string="Valores (Sepáralos con un tab)" widget="many2many_tags_variaciones_bb" options="{'no_create_edit': False}" context="{'default_attribute_id': attribute_id, 'show_attribute': False}"/> </tree> </field>La acción de mi botón es:
'click tr .o_list_record_add': '_onAddIconClick',y la función:
_onAddIconClick: function(event){ this._onAddRecord(event,true) },mi error es:
web.assets_backend.js:1144 Uncaught (in promise) TypeError: Cannot read property 'then' of undefinedNo estoy seguro si es la forma correcta o si me puedes orientar te lo agradecería.
Nota: Odoo14
Botón frontal JS nuevo:
_onAddIconClick: function(event){ var self = this; this._rpc({ model: record.model, method: 'save_record', context: { model: record.model, record: record, }, }).then(function () { self._render() }); }en el backend recopilo el contexto y aplico tus criterios
@api.model def save_record(self): record = self.env.context['record'] pt = self.env['product.template'].sudo().browse(record['context']['params']['id']) if pt: attribute_id_rec = record['data']['attribute_id'] value_ids_rec = record['data']['value_ids'] obj ={} obj['has_variants'] = True value_ids = {} value_ids['attribute_id'] = attribute_id_rec['res_id'] value_ids['value_ids'] = [[6, False, value_ids_rec['res_ids']]] lista = [[0, record['ref'], value_ids]] obj['attribute_line_ids'] = lista return pt.write(obj)