【问题标题】:Module not showing in OpenERP模块未在 OpenERP 中显示
【发布时间】:2013-11-27 08:30:23
【问题描述】:

我尝试在 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 模块都显示不出来

【问题讨论】:

  • 请正确格式化代码。我试过了,但对其他人来说似乎很难。
  • 我认为你在概念上是错误的。 Python文件和XML文件中的型号名称完全不同。
  • 你至少错过了将模块定义为 OpenERP 模块的 __openerp__.py 文件
  • 我也添加了这个文件,但我没有提到这里我在 eclipse 中添加
  • 您是否将模块保存在正确的位置(oddons/ 文件夹下)?

标签: python xml module openerp


【解决方案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 中的 cmets。

最后一步是__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 文件列表。

完成所有这些之后,我进入了 Administration -> Modules 菜单并执行了 Update Modules List。当我过滤名为 test 的模块时,您的新模块出现在我的列表中。我选择它进行安装并通过 Apply Scheduled Updates 菜单操作安装它。

Et voilà - F5 刷新,主菜单栏中出现了一个新菜单 TEST BASE。现在我可以在数据库中创建新的 my.class 对象了。

此收据适用于 OpenERP 6.0。我没有在 OpenERP 7 上测试过,我知道模块定义存在一些差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多