模块未在OpenERP中显示

时间:2013-11-27 08:30:23

标签: python xml module openerp

我尝试在eclipse中编码,当我运行它时无法向我显示任何错误

这是test_module.py文件

from osv import osv
from osv import fields

class MyClass(osv.osv):
'''
  classdocs
'''
  _name='my.class'
  _columns={
      'name':fields.char("Name",size=128,),
      'code':fields.char("Code",size=127,),
           }
MYClass()

def __init__(selfparams):
'''
  Constructor
'''

这是xml文件

<?xml version=“1.0″ encoding=“utf-8″?>
<openerp>
  <data>
    <record model=“ir.ui.view” id=“test_base_form”>
      <field name=“name”>test.base.form</field>
      <field name=“model”>test.base</field>
      <field name=“type”>form</field>
      <field name=“arch” type=“xml”>
        <form string=“Test Base”>
          <field name=“name”/>
          <field name=“code”/>
        </form>
      </field>
    </record>
    <record model=“ir.ui.view” id=“test_base_tree”>
      <field name=“name”>test.base.tree</field>
      <field name=“model”>test.base</field>
      <field name=“type”>tree</field>
      <field name=“arch” type=“xml”>
        <tree string=“Test Base”>
          <field name=“name”/>
          <field name=“code”/>
        </tree>
      </field>
    </record>
    <record model=“ir.actions.act_window” id=“action_test_seq”>
      <field name=“name”>Test Base</field>
      <field name=“res_model”>test.base</field>
      <field name=“view_type”>form</field>
      <field name=“view_mode”>tree,form</field>
    </record>

    <menuitem id=“menu_test_base_main” name=“Test Base”/>
    <menuitem id=“menu_test_base” parent=“menu_test_base_main”
              name=“Test Base” action=“action_test_seq”/>
  </data>
</openerp>

当我转到__init__.py文件并像这样导入时

import test_module 

它不能显示任何错误 然后,当我想显示这个模块,然后我去设置 - 更新模块列表 那么在OpenERP中它无法向我展示任何模块 问题出在哪儿? 我已经尝试了很多次但是无法在OpenERP中显示模块

1 个答案:

答案 0 :(得分:1)

我的问题是我无法理解你到底在做什么。您发布的代码没有显示您的方法,格式非常糟糕。例如以下

model=“ir.ui.view”
由于使用了错误的引号,

无效的xml属性定义。应该是这样的:

model="ir.ui.view"

这就是为什么我会从代码开始给出我遵循的基本步骤。

首先,文件 test_module.py

中的模型定义
from osv import osv
from osv import fields

class MyClass(osv.osv):
    '''
      classdocs
    '''

    _name='my.class'
    _columns={
        'name': fields.char("Name", size=128,),
        'code': fields.char("Code", size=127,),
    }


# Corrected - MyClass() instead of MYClass()    
MyClass()

这里没什么特别的,除了你在实例化时拼错了类名。我还删除了__init __()方法,因为他的位置不在你放置的位置。

其次, __ init __。py 文件加载新模型:

import test_module

现在,XML文件包含视图,操作和菜单定义。

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="test_base_form">
            <field name="name">test.base.form</field>
            <!-- corrected to have the right model as programmed in test_module.py -->
            <field name="model">my.class</field>
            <field name="type">form</field> 
            <field name="arch" type="xml">
                <form string="Test Base">
                    <field name="name"/>
                    <field name="code"/>
                </form>
            </field>
        </record>
        <record model="ir.ui.view" id="test_base_tree">
            <field name="name">test.base.tree</field>
            <!-- corrected to have the right model as programmed in test_module.py -->
            <field name="model">my.class</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="Test Base">
                    <field name="name"/>
                    <field name="code"/>
                </tree>
            </field>
        </record>
        <record model="ir.actions.act_window" id="action_test_seq">
            <field name="name">Test Base</field>
            <!-- corrected to have the right model as programmed in test_module.py -->
            <field name="res_model">my.class</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="menu_test_base_main" name="Test Base"/>
        <!-- Removed parent. You need an existing parent menu if you want to specify one -->
        <!-- Also the action attribute has to point to the action you just defined -->
        <menuitem id="menu_test_base" 
            name="Test Base" action="action_test_seq"/>
    </data>
</openerp>

看看我在XML中的评论。

最后一步是 __ openerp __。py 文件中的OpenERP模块定义:

{
    'name': 'Test module',
    'description': 'Module for demonstration of the new module creation process in OpenERP',
    'category': 'Test',
    'author': 'Andrei Boyanov <andrei at novatus dot bg>',
    'website': 'http://novatus.bg',
    'version': '0.01',
    'depends': [],
    'init_xml': [],
    'update_xml': [
        'test_view.xml',
    ],
    'installable': True,
}

这里重要的一件事是更新时要考虑的XML文件列表。

在完成所有这些后,我进入了管理 - &gt;模块菜单并执行更新模块列表。当我通过名称测试过滤模块时,您的新模块出现在我的列表中。我选择它进行安装,然后通过 Apply Scheduled Updates 菜单操作安装它。

Etvoilà - 用于刷新的F5和主菜单栏中出现的新菜单 TEST BASE 。现在我可以在数据库中创建新的my.class对象。

此收据对OpenERP 6.0有效。我没有在OpenERP 7上测试它,我知道模块定义存在一些差异。