一、OPENERP 的一个demo

摘要:
步骤1:cd到上面提到的模块目录,然后创建一个名为test1的新文件夹。步骤2:在新的test1目录y_init__下创建四个文件。py,__打开__。皮,教训。py,lesson_view。xml文件的简要描述:__init__。Py是python模块初始化modules__openerp_所必需的文件。Py是openerp所需的文件,其中包含与此模块相关的一些信息。课程py是本示例中使用的类,包括一些课程信息_视图。xml文件指明了该模块在OPENERP中的布局。

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

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

/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-8 -*-
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

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
    <!--定义表单视图-->
        <record model="ir.ui.view" id="test1_lesson_form_view">
            <field name="name">课程表单</field>
            <field name="type">form</field>
            <field name="model">test1.lesson</field>
            <field name="arch" type="xml">
                <form string="课程表单">
                    <field name="name"/>
                    <field name="date_start"/>
                    <field name="total_day"/>
                    <field name="price"/>
                    <field name="teacher"/>
                    <field name="students" colspan="4"/>
                </form>
            </field>
        </record>
        <!--定义列表视图-->
        <record model="ir.ui.view" id="test1_lesson_tree_view">
            <field name="name">课程列表</field>
            <field name="type">tree</field>
            <field name="model">test1.lesson</field>
            <field name="arch" type="xml">
                <tree string="课程列表">
                    <field name="name"/>
                    <field name="date_start"/>
                    <field name="teacher"/>
                    <field name="price" sum="合计"/>
                </tree>
            </field>
        </record>
<!--定义视图动作-->
    <record model="ir.actions.act_window"  id="action_kevin_kong_lesson">
        <field name="name">课程</field>
        <field name="res_model">test1.lesson</field>
        <field name="view_type">form</field>
        <field name="view_mode">form,tree</field>
        <field name="view_id" ref="test1_lesson_tree_view"/>
    </record>
<!--定义菜单-->
    <menuitem id="kevin_menu" name="kevin"/>
    <menuitem id="kevin_kong_menu" name="kevin kong" parent="kevin_menu"/>
    <menuitem id="kevin_kong_lesson_menu" name="kevin kong Lesson" parent="kevin_kong_menu" action="action_kevin_kong_lesson"/>   
</data>
</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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端加密MD5vsto下开发wps插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 序列化与反序列化之DataContract与xml对子类进行序列化的解决方案

C# 序列化与反序列化之DataContract与xml对子类进行序列化的解决方案 1、DataContract继承对子类进行序列化的解决方案 第一种是在 [DataContract, KnownType(typeof(继承的子类))]添加 KnownType(typeof(继承的子类))即可,第二种是在序列化的时候,添加类型 DataContractSe...

玩转Spring Boot 自定义配置、导入XML配置与外部化配置

玩转Spring Boot 自定义配置、导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先级顺序。Spring Boot使用一个全局的配置文件application.properties,Spring Boot 支持使用YAML语言的配置文件,...

[软件过程/软件生命周期模型]软件过程的工具链【待续】

0 宣言:DevOps & RUP统一过程建模 1 项目管理 (需求管理 / 缺陷管理 / ...) 禅道(前身:bugfree) [在线协作] JIRA(项目与事务跟踪工具) 与禅道类同,但又不同,有明显的Scrum敏捷风格 Microsoft Project [离线维护] 在线文档 or Excel 2 系统建模 2....

Android中xml设置Animation动画效果详解

在Android中,Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation渐变动画,另一种是frame by frame animation画面转换动画。 tweened animation渐变动画有以下两种类型: 1.alpha 渐变透明度动画效果 2.scale 渐变尺寸伸缩动画效果 frame by fra...

Winform中对自定义xml配置文件进行Xml节点的添加与删除

场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100532137 在上面已经对xml配置文件对节点能进行读取与写入之后 ,实现对节点元素的 添加与删除。 关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。大量...

Eclipse中配置Ehcache提示信息

下载   ehcache .xsd文件 1、首先将 ehcache.xml 的 <ehcache> 元素的 xsi:noNamespaceSchemaLocation 属性进行修改,本例为 xsi:noNamespaceSchemaLocation="http://ehcache.xsd"  2、打开eclipse,依次点击 Wind...