【OpenERP 7.0 开发教程】3 OpenERP开发演练:原文教程地址
目录
- 教程review
- 新建1个模型
x_qingjd
,4个字段x_kaisrq
x_shenqr
x_shiyou
- 新建2个视图
- 创建3个菜单项(模型 → 请假单 → 创建菜单)
- Action,不需要手动创建
- 问题分析
- 关于
ir_act_window_view
无新记录的分析
一、教程review
1. 新建1个模型 x_qingjd
,4个字段 x_kaisrq
x_shenqr
x_shiyou
x_tians
- 多一张
x_qingjd
单 -
ir_model
多一条记录,表示新表 -
ir_model_fields
多四条记录,表示新的四个字段
2. 新建2个视图(PS:序列号是什么用?)
-
ir_ui_view
多两条记录,xml保存在arch
中
3. 创建3个菜单项(模型 → 请假单 → 创建菜单)
-
ir_ui_menu
多三条记录
4. Action,不需要手动创建
-
ir_act_window
多两条记录 -
ir_act_window_view
理论上这张表要有数据生成,然而却没有数据 -
ir_values
多两条记录,
二、疑问
如果完全按照教材里面的做,功能肯定是能用,但是有几点要说明:
- 使用界面开发模块,不要指望在本地代码中找到痕迹,xml也好,py也好,都找不到相关代码。
- 教程第二步中:序列号是什么用?
-
ir_act_window_view
表压根就没有新记录生成,真奇怪这个功能为什么还能用???关于这一点,原教程也没有提及。
三、关于 ir_act_window_view
无新记录的分析
没有新记录肯定是操作上的问题,有可能是遗漏了步骤,因为我也是初学者,就不分析。
我分析看为什么请假单这个例子没有 ir_act_window_view
记录,仍然可以工作。
其实从点击菜单到后台orm代码,最关键的无非就是要找到view。
见 osv.orm.BaseModel.fields_view_get
中关键代码
if view_ref and not view_id:
if '.' in view_ref:
module, view_ref = view_ref.split('.', 1)
cr.execute("SELECT res_id FROM ir_model_data WHERE model='ir.ui.view' AND module=%s AND name=%s", (module, view_ref))
view_ref_res = cr.fetchone()
if view_ref_res:
view_id = view_ref_res[0]
if view_id:
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
FROM ir_ui_view
WHERE id=%s""", (view_id,))
else: # 请假单这个例子进的是这个分支
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
FROM ir_ui_view
WHERE model=%s AND type=%s AND inherit_id IS NULL
ORDER BY priority""", (self._name, view_type))
sql_res = cr.dictfetchone()
if not sql_res:
break
view_id = sql_res['inherit_id'] or sql_res['id']
通过打印日志,发现执行的SQL如下
SELECT arch, name, field_parent, id, type
, inherit_id, model
FROM ir_ui_view
WHERE model = x_qingjd
AND type = tree
AND inherit_id IS NULL
ORDER BY priority
换句话说,OpenERP默默的在补了很多工作,即使是用户遗漏了某些数据,还是能比较顺利的处理!