需求:之前做过的产品查询系统,需要有很多产品分类。odoo的菜单无法将每个分类自动显示在菜单上,所以只能手动创建与产品分类名称相同的二级菜单绑定动作。无法实现自动化和通用化。
思路:我的理解,odoo一切都是记录,菜单也是存到数据库的记录
创建分类的时候 同步创建动作和菜单 ,废话不多说,上代码:
name = fields.Char(string='Name')
parent_id = fields.Many2one('product.search.category', string='Parent Category')
chlid_ids = fields.One2many('product.search.category', 'parent_id', string='Chlid Cat')
@api.model
def create(self, values):
res = super(ProductSearchCategory, self).create(values)
res._create_menu()
return res
def _create_menu(self):
action = self._create_action()
parent_id = self.env.ref('product_search.menu_product_search_list').id
menu_model = self.env['ir.ui.menu']
if self.parent_id:
parent = menu_model.search([
('name', '=', '%s_menu' % self.parent_id.name)
])
if parent:
parent_id = parent[0].id
else:
raise UserError(u'不存在父级分类的菜单!')
menu_model.create({
'name': '%s_menu' % self.name,
'action': '%s,%s' % (action._name, action.id),
'parent_id': parent_id
})
def _create_action(self):
action = self.env['ir.actions.act_window'].create({
'name': '%s_action' % self.name,
'res_model': 'product.search.product',
'context':{'defaut_category_id': self.id},
'domain': [('category_id', '=', self.id)],
})
return action