几天来我已经开始关于openerp结构了,我明白了,openerp就是mvc。从教程:
型号:Postgre表
查看:XML文件
控制器:OpenERP的对象
让我仍然感到困惑的是,当我试图提交控制器文件的位置时,我在模块(sale)中找到了一个文件,sale.py,我认为它是控制器,但当我在里面检查时文件,里面还有一个查询..
...
def _picked_rate(self, cr, uid, ids, name, arg, context=None):
if not ids:
return {}
res = {}
for id in ids:
res[id] = [0.0, 0.0]
cr.execute('''SELECT
p.sale_id, sum(m.product_qty), mp.state as mp_state
FROM
stock_move m
LEFT JOIN
stock_picking p on (p.id=m.picking_id)
LEFT JOIN
procurement_order mp on (mp.move_id=m.id)
WHERE
p.sale_id IN %s GROUP BY mp.state, p.sale_id''', (tuple(ids),))
...
正如我从其他框架所知,关于模型,视图和控制器在不同的文件(CI,Yii等)中分开。那么openerp呢?控制器和型号怎么样?
答案 0 :(得分:2)
Developer book中的MVC架构描述告诉您“在OpenERP中,我们可以将此模型 - 视图 - 控制器语义应用于”:
sale.py
定义了对象和业务逻辑,因此它是控制器。但是,有时实现代码会绕过ORM并直接访问数据库,通过execute()
方法运行SQL。这应该是例外,因为正确的方法是通过ORM的browse()
方法。
另请注意,虽然模型组件由PostgreSQL表“托管”,但实际上它们是在.py
文件中定义的。我会说.py
文件定义了模型和控制器逻辑。
答案 1 :(得分:1)
OpenERP可以应用于标准MVC,但OpenERP是multitenant三层架构。根据框架模型,可以通过控制器访问,例如。
cr.execute('select partner_id from sale_order where id=%d', (ID,))
partner_id = cr.fetchone()[0]
通过覆盖fields_view_get方法,还可以从控制器创建视图(.py文件)(Doc)