Odoo10 怎么在onchange里面为one2many赋值?
-
@萧云飞 我现在的代码是这样的。
def _materialValue(self): page = [] for item in self.suite_series.main_material_ids: product_ids = [] data = { 'location': item.area_id.id, # 区域位置 'name': item.project_record_id.name, # 项目名称 'model': item.model_type, # 型号 'brand': item.product_brand_id.id, # 品牌 'specifications': item.specifications, # 规格 'price': item.price, # 单价 'number': item.number, # 数量 'unit': item.unit.id, # 单位 # 'product_ids': False, 'total_price': item.total_price, # 合价 'remarks': item.general_description, # 备注 'attribute': item.attribute_value_ids # 属性 } # 遍历材料 0,false,[object Object],0,false,[object Object] for val in item.product_id: line_item = { 'product_id': val.product_id.id, # 材料 'classify': val.pro_type # 分类 } product_ids.append((0, 0, line_item)) data.update({'product_ids': product_ids}) page.append((0, False, data)) return page
返回的数据是:
< type 'list' >: [(0, 0, { 'specifications': u '\u89c4\u683c', 'attribute': product.attribute.value(), 'price': 100.0, 'number': 1, 'remarks': False, 'unit': 8, 'total_price': 10000.0, 'name': u '\u6728\u5730\u677f', 'location': 12, 'model': u '\u578b\u53f7', 'brand': 1, 'product_ids': [(0, 0, { 'product_id': 25, 'classify': False }), (0, 0, { 'product_id': 33, 'classify': False })] }), (0, 0, { 'specifications': u '12', 'attribute': product.attribute.value(), 'price': 237500.0, 'number': 112, 'remarks': False, 'unit': 8, 'total_price': 0.0, 'name': u '\u74f7\u7816', 'location': 12, 'model': u '12', 'brand': 1, 'product_ids': [(0, 0, { 'product_id': 32, 'classify': False }), (0, 0, { 'product_id': 33, 'classify': False })] })]
onchange方法
@api.onchange('suite_series') def onchange_suite_series(self): """套装改变""" if self.main_materials_list or self.basic_materials_list or self.basic_incidentals: return {'warning': { 'title': '警告', 'message': '材料已经存在' }} self.main_materials_list = self._materialValue()
-
@萧云飞 感谢您哈。做出来了,第一层赋值确实如你所说,第二次我就只能重写create方法来写入数据了!
@api.onchange('suite_series') def onchange_suite_series(self): """套装改变""" if self.main_materials_list or self.basic_materials_list or self.basic_incidentals: return {'warning': { 'title': '警告', 'message': '材料已经存在' }} self.basic_incidentals = self._incidentals() self.main_materials_list = self._materialValue() self.basic_materials_list = self._basicMaterial() @api.multi def _materialValue(self): """返回主材数据的model""" page = list() for item in self.suite_series.main_material_ids: # 主材项目数据 data = { 'location': item.area_id.id, # 区域位置 'name': item.project_record_id, # 项目名称 'model': item.model_type, # 型号 'brand': item.product_brand_id.id, # 品牌 'specifications': item.specifications, # 规格 'price': item.price, # 单价 'number': item.number, # 数量 'unit': item.unit.id, # 单位 'total_price': item.total_price, # 合价 'remarks': item.general_description, # 备注 'attribute': item.attribute_value_ids # 属性 } page.append((0, 0, data)) return page
@api.model def create(self, values): """重写保存方法""" result = super(BudgetMainMaterial, self).create(values) old_material = self.env['material'].search([('main_material_id', '=', values[u'name'])]) for material in old_material: self.env['budget.material'].create({'product_id': material.product_id.id, 'main_id': result.id})