繼承
在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 目錄下
2.Administation->Modules Management->Update Modules List可以更新模塊列表。
3.在模塊列表裏面選擇product_code_extend,點擊Schedule for installation再點擊 Apply Scheduled Upgredes更新模塊,
4.重啓服務,重新登錄,成功。
如果新建的product違反了約束條件,保存的時候就會報錯
調試方法
- LOG
- self.logger.notifyChannel(‘addons.’+self._name, netsvc.LOG_INFO, ‘value:%s’%res)
- XMLRPC
- OpenERPServeraddonsquality_integration_serverbase_quality_interrogation.py
- Assert
- …
want more,請看調試方法