安装好OPENERP后,使用 ps -aux|grep openerp

从输出的内容可以得到OPENERP的安装信息,

  1. /usr/bin/python /usr/bin/openerp-server --config=/etc/openerp/openerp-server.conf --logfile=/var/log/openerp/openerp-server.log

其中包含python的安装目录,openerp的安装目录,配置文件所在目录和日志文件所在目录。

打开openerp的配置文件(openerp-server.conf),可以看到相关的配置参数

  1. [options]
  2. ; This is the password that allows database operations:
  3. ; admin_passwd = admin
  4. db_host = False
  5. db_port = False
  6. db_user = openerp
  7. db_password = False

采用apt方式安装的openerp,模块的目录在 :/usr/lib/pymodules/python2.7/openerp/addons

下面是我经过半天调试通的一个demo模块,

源地址:http://www.openerp-china.org/index.php?page=developer

原地址中有很多需要注意的地方并没有写出来,下面是一步一步编辑的详细步骤,我会把自己遇到的问题及解决方案同时注明出来。

我们的目的是新建一个模块,包含一些学生选课的信息,具体说明请参见源地址,此处不再详述。

第一步,cd到上面说的模块目录,然后新建一个文件夹,此处命名为test1

第二步,在新建的test1目录下新建4个文件,__init__.py,__openerp__.py,lesson.py,lesson_view.xml

    文件的简要说明:__init__.py  是python module 必须的文件,做一些模块初始化的工作,__openerp__.py 是openerp需要的文件,其中包含了一些跟此模块相关的信息,lesson.py 是我们此例中使用的类,包括了一些课程的信息,lesson_view.xml文件是指明此模块在OPENERP中如何布局的文件。

第三步,__init__.py文件的内容

  1. # -*- coding: utf- -*-
  2. import lesson #导入包含Python代码的所有文件和目录

第一行的作用是指明该文件以utf-8格式编码,因为此处包含中文注释。

第四步,__openerp__.py文件的内容

  1. # -*- coding: utf-8 -*-
  2. {
  3. "name" : "test1", #模块名
  4. "version" : "1.0", #模块版本
  5. "description" : 'kevin kong's Demo', #模块说明
  6. "author" : "kevin kong", #作者
  7. "website" : "http://www.kfx2007.com", #网址
  8. "depends" : [], #依赖的模块
  9. "update_xml" : ["lesson_view.xml"], #模块更新的时候会读入的文件
  10. "installable" : True, #可否安装
  11. "category":'Generic Modules/Others' #模块类型
  12. }

这是一个python的字典,其中包含了一些关于此模块的信息。

第五步,lesson.py文件的内容:

  1. # -*- coding: utf-8 -*-
  2. from openerp.osv import fields, osv
  3.  
  4. class test1_lesson(osv.osv):
  5. _name = 'test1.lesson'
  6. _discription = 'test1 demo'
  7. _columns = {
  8. 'name':fields.char( u'课程名',size=64,select=True),
  9. 'date_start':fields.date(u'开始日期',select=True),
  10. 'total_day':fields.float(u'总天数',digits=(16,1)),
  11. 'teacher':fields.many2one('res.users',u'授课老师'),
  12. 'students':fields.many2many('res.partner',string=u'学生'),
  13. 'price':fields.float(u'价格',digits=(16,2)),
  14. }
  15. test1_lesson()

第五步,lessson_view.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <openerp>
  3. <data>
  4. <!--定义表单视图-->
  5. <record model="ir.ui.view" id="test1_lesson_form_view">
  6. <field name="name">课程表单</field>
  7. <field name="type">form</field>
  8. <field name="model">test1.lesson</field>
  9. <field name="arch" type="xml">
  10. <form string="课程表单">
  11. <field name="name"/>
  12. <field name="date_start"/>
  13. <field name="total_day"/>
  14. <field name="price"/>
  15. <field name="teacher"/>
  16. <field name="students" colspan=""/>
  17. </form>
  18. </field>
  19. </record>
  20. <!--定义列表视图-->
  21. <record model="ir.ui.view" id="test1_lesson_tree_view">
  22. <field name="name">课程列表</field>
  23. <field name="type">tree</field>
  24. <field name="model">test1.lesson</field>
  25. <field name="arch" type="xml">
  26. <tree string="课程列表">
  27. <field name="name"/>
  28. <field name="date_start"/>
  29. <field name="teacher"/>
  30. <field name="price" sum="合计"/>
  31. </tree>
  32. </field>
  33. </record>
  34. <!--定义视图动作-->
  35. <record model="ir.actions.act_window" id="action_kevin_kong_lesson">
  36. <field name="name">课程</field>
  37. <field name="res_model">test1.lesson</field>
  38. <field name="view_type">form</field>
  39. <field name="view_mode">form,tree</field>
  40. <field name="view_id" ref="test1_lesson_tree_view"/>
  41. </record>
  42. <!--定义菜单-->
  43. <menuitem id="kevin_menu" name="kevin"/>
  44. <menuitem id="kevin_kong_menu" name="kevin kong" parent="kevin_menu"/>
  45. <menuitem id="kevin_kong_lesson_menu" name="kevin kong Lesson" parent="kevin_kong_menu" action="action_kevin_kong_lesson"/>
  46. </data>
  47. </openerp>

之后重新更新一下模块,就能看到自己编写的模块出现在未安装的模块中了。

拷贝上面的代码虽然能很快看到效果,但实际编写才发现问题多多,

如果你碰到下面的错误,可参考给出的解决方案。

1.“SyntaxError: Non-ASCII character“,文件中没有写”#-*-coding:utf-8 -*-“或拼写有错误

2.“You try to install module '' that depends on module 'lesson'. But the latter module is not available in your system“,网上说是没有引用相关的类,我自己实验的过程中其实不是这里的错误,其他地方的错误改正了,这个错误也就没了。一定记得,改过view后要通过update module才能正确的使用修改过的代码。

3.“AttributeError: 'NoneType' object has no attribute 'fields_view_get'“ 参考 http://help.openerp.com/question/35163/attributeerror-nonetype-object-has-no-attribute-fields_view_get/

4. "Error occurred while validating the field(s) arch:Invalid XML forViewArchitecture!" :出现这个问题的原因多半是因为xml文件中出现了拼写错误,可以查看日志文件查找出错的行,切记拼写正确。另一个原因是module类写错,格式应该是模块的文件夹名+“."+module文件名的方式。

一、OPENERP 的一个demo的更多相关文章

  1. angular开发者吐槽react+redux的复杂:“一个demo证明你的开发效率低下”

    曾经看到一篇文章,写的是jquery开发者吐槽angular的复杂.作为一个angular开发者,我来吐槽一下react+redux的复杂. 例子 为了让大家看得舒服,我用最简单的一个demo来展示r ...

  2. 初识nginx之第一个demo

    商城项目做了一个多月了,想到必须用到负载均衡,简单了解了一下nginx,首先分享第一个demo,五月份上线后,会继续分享一系列相关知识. 在nginx根目录下,用了一个园友的批处理文件nginx.ba ...

  3. springMvc的第一个demo

    1.下载jar包 http://repo.spring.io/libs-release-local/org/springframework/spring/4.2.3.RELEASE/ 2.下载源码 j ...

  4. Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)

    在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...

  5. 如何在WTL和MFC中使用duilib及如何静态使用duilib库!(初级讲解 附带一个Demo)

    关于duilib的历史,我也就不多说了,能看到这篇文章的人都是有一定了解才能找到这个的. 我直接说下对这个库的基本使用吧. 我个人对一些好技术都是比较感兴趣的. 因为个人原因 喜欢接触一个好技术. 所 ...

  6. 白盒测试之gtest第一个demo

    认识gtest工具后,关于它的使用,下面将用一个demo程序演示一下gtest的用法以及成果展示. 一.需要测试的C++代码: #include "myfunction.h" // ...

  7. 在VS中实现webService的一个demo(图解)

    在VS中实现webService的一个demo(图解) 先创建一个web项目,创建好web项目后,添加新建项——web服务 在新建好的web服务文件中写如下代码: 生成当前解决方案. 新建一个winf ...

  8. Cocos2d-x 学习(1)—— 通过Cocos Studio创建第一个Demo

    近期在工作上有了比較大的转变,自学情绪也慢慢高涨,本来一直在研究unity的技术.由于换了工作会開始接触cocos2d-x.但并不意味着停止研究unity,以后有时间还是会继续的. 公司的cocos2 ...

  9. 使用android的mediaplayer做成 一个demo,欢迎测试使用

    附件是为一个定制视频产品而简单的写了一个demo,用来说明android的mediaplayer是如何使用的. http://files.cnblogs.com/guobaPlayer/palyerD ...

随机推荐

  1. openssl生成ssl证书(转)

    原文:http://blog.sina.com.cn/s/blog_4fd50c390101891c.html x509证书一般会用到三类文,key,csr,crt. Key 是私用密钥openssl ...

  2. rabbitmq用户权限管理

    原文地址: http://my.oschina.net/hncscwc/blog/262246 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号 ...

  3. Freedom DownTime

    Storyline Computer hackers are being portrayed as the newest brand of terrorists. This is a story of ...

  4. Ubuntu的常识使用了解4

    寻找文件的「名称」 在Linux系统当中,文件的数量非常非常的多, 需要使用查找工具来高效查找指定文件位置:

  5. Concurrent Request:Inactive phase,No Manager status

    Symptom 随便submit一个request,发现几乎所有的Concurrent Manager都为No Manager状态,Phase为Inactive. Solution 一个Concurr ...

  6. [leetcode] 12. Merge Sorted Array

    这道题的无聊之处在于题目其实给了一些很奇怪的测试用例.比如他会给一些空的数组来,但是这个是不科学的,因为在C++中不允许定义一个空的列表,我们用的又不是那种糙又快的python,所以在这里我遇到了一些 ...

  7. memory leak-----tomcat日志warn

    web应用借助于结构:spring mvc + quartz结构,部署到tomcat容器时,shutdown时的error信息: appears to have started a thread na ...

  8. solr介绍一:Analyzer(分析器)、Tokenizer(分词器)

    首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...

  9. Visual Studio for mac从入门到放弃1

    MAC  第一步:从微软官网下载:https://www.visualstudio.com/vs/visual-studio-mac/ 第二步:安装软件过程出现 It was not possible ...

  10. c# 中 $符号的用法

    var names = new List<string> { "jason", "Ana", "Felipe" }; forea ...