openerp 6中的控制器文件..?

时间:2012-10-23 07:14:55

标签: postgresql openerp

几天来我已经开始关于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呢?控制器和型号怎么样?

2 个答案:

答案 0 :(得分:2)

Developer book中的MVC架构描述告诉您“在OpenERP中,我们可以将此模型 - 视图 - 控制器语义应用于”:

  • model:PostgreSQL表。
  • view:视图在OpenERP中的XML文件中定义。
  • controller: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