2012-10-23 21 views
1

對於我已經有關於openerp結構的日子,我明白了,openerp是mvc。從教程:openerp 6 ..中的控制器文件?

型號:Postgre表

查看:XML文件

控制器:OpenERP的

的,讓我仍然迷惑的對象是,當我試圖文件在哪裏控制器文件,我發現一個文件裏面的模塊(銷售),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

Developer book MVC架構的描述告訴你,「在OpenERP的,我們可以把這個模型 - 視圖 - 控制器語義用」:

  • 型號:PostgreSQL的表。
  • 視圖:視圖在OpenERP中的XML文件中定義。
  • 控制器:OpenERP的對象。

sale.py定義了對象和業務邏輯,所以它是控制器。但是,有時實現代碼會繞過ORM並直接訪問數據庫,通過​​方法運行SQL。這應該是例外,因爲正確的方法是通過ORM的browse()方法。

另請注意,儘管模型組件由PostgreSQL表「託管」,實際上它們是在.py文件中定義的。我會說.py文件定義了模型和控制器邏輯。

+0

所以這意味着模型和控制器是在同一個文件,是嗎?那麼* .mako文件呢? openerp中* .py和* .mako有什麼區別? –

+0

.mako文件被創建用於生成webkit報告,而.py文件用於定義模型和業務邏輯。 –

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