模塊開發實例 (Story 1)繼承模型

繼承

在OpenERP裏面繼承機制很好的實現對於原有模塊的修改,多用於添加,修改字段和方法。

用戶故事

作爲小超市店長,用戶希望能對商品編號不能重複。

包結構

OpenERP模塊結構

__init__.py

__terp__.py

product.py

__init__.py

import product

就像其他的Python模塊,是程序的初始化文件,在裏面會寫了那些需要導入的文件

在本例子的是導入product.py,so..

 

__terp__.py

{
    'name' : 'product_code_extend',
    'version' : "1.0",
    'depends' : ['product'],
    'init_xml' : [],
    'update_xml' : [],
    'installable' : True,
    'active' : False,
    'author' : 'joshua',
    'website': 'http://openerp-china.org',
}

terp是OpenERP模塊的說明文件,也是用python語言編寫的,這個文件最重要的用途是

1.確定有哪些XML文件是需要在初始化的時候導入到server裏面的。(此例子沒有)

2.確定在創建這個模塊的時候有哪些依賴的模塊。(這裏的product模塊)

product.py

 

from osv import fields
from osv import osv

class product_product(osv.osv):
    _name = 'product.product'
    _inherit = 'product.product'
    _sql_constraints = [
       ('default_code_product_uniq', 'unique(default_code,id)', 'The code of the product must be unique!')
    ]
product_product()

關於裏面屬性的詳盡含義可以看這裏

_inherit = ‘product.product’這個是你要繼承的對象,在addonproductproduct.py裏面可以查看到本來的product模塊,我們這裏是想按照code來排序,code在原來的product.produt裏面是

'default_code' : fields.char('Code', size=64),

所以這裏_order = _order = ‘default_code’ 就是講產品的列表按照編號來排序,而_sql_constraints 則是在數據表裏面添加一條這樣的約束條件

CONSTRAINT product_product_default_code_product_uniq UNIQUE (default_code)

更新到OpenERP

1.將上面建好的模塊放在OpenERP Serveraddons 目錄下

Image:product_code_extend_location.jpg

2.Administation->Modules Management->Update Modules List可以更新模塊列表。

Image:product_code_extend_update_module_list.jpg

3.在模塊列表裏面選擇product_code_extend,點擊Schedule for installation再點擊 Apply Scheduled Upgredes更新模塊,

Image:product_code_extend_update.jpg

4.重啓服務,重新登錄,成功。

如果新建的product違反了約束條件,保存的時候就會報錯

Image:product_code_error.jpg

調試方法

LOG
self.logger.notifyChannel(‘addons.’+self._name, netsvc.LOG_INFO, ‘value:%s’%res)
XMLRPC
OpenERPServeraddonsquality_integration_serverbase_quality_interrogation.py
Assert

want more,請看調試方法

發佈了26 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章