0

几天来,我已经了解了 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呢?控制器和模型呢?

4

2 回答 2

2

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

  • 模型:PostgreSQL 表。
  • view : 视图在 OpenERP 的 XML 文件中定义。
  • controller : OpenERP 的对象。

sale.py定义了对象和业务逻辑,所以它是控制器。但是,有时实现代码会绕过ORM,直接访问数据库,通过execute()方法运行SQL。这应该是个例外,因为正确的方法是通过 ORM 的browse()方法。

另请注意,尽管模型组件由 PostgreSQL 表“托管”,但实际上它们是在.py文件中定义的。我会说.py文件定义了模型和控制器逻辑。

于 2012-10-23T07:53:59.163 回答
1

OpenERP 可以应用于 The Standard MVC,但 OpenERP 是一个多租户、三层架构。根据框架模型可以通过控制器访问,例如。

cr.execute('select partner_id from sale_order where id=%d', (ID,))
partner_id = cr.fetchone()[0]

通过覆盖 fields_view_get 方法,还可以从控制器(.py 文件)(Doc)创建视图

于 2012-10-23T14:35:40.860 回答