【问题标题】:inheritance of customized module in openerpopenerp中自定义模块的继承
【发布时间】:2014-01-14 10:48:23
【问题描述】:

我已经成功创建了模块,它工作得非常好。现在,我从那个模块继承了另一个模块,我需要你对 xml 生成的支持。我已经给出了原始模块 .py 和 xml 文件以及新模块 .py 文件。请为我提供新模块的 xml

原始模块.py文件

from osv import osv
from osv import fields

class test_base(osv.osv):
    _name='test.base'
    _columns={
        'name':fields.char('Name'),
        'email':fields.char('Email'),

        'code':fields.integer('Unique ID'),
        'sal':fields.float('Salary'),
        'rate':fields.selection(((10,'10'), (20,'20'),(30,'30')),
               'Percentage of Deduction'),
        'ded':fields.float('Deduction'),
        'bdisplay':fields.float('Button Display'),

}

    def on_change_ded_cal(self, cr, uid, ids,rate,context=None):
        x=rate*2
        return {'value':{'ded':x }}


test_base()  

原始模块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="email"/>
                   <field name="code"/>
                   <field name="sal"/>
                   <field name="rate" on_change="on_change_ded_cal(rate)"/>
                   <field name="ded"/>                       
                   <field name="bdisplay"/>                    
                  </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="email"/>
                <field name="code"/>
                <field name="sal"/>          
                <field name="ded"/>                    
            </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" action="action_test_seq"/>
    <menuitem id="menu_test_base" parent="menu_test_base_main"
              name="Test Base1" action="action_test_seq"/>
</data>
</openerp>

新建模块.py文件

from osv import osv
from osv import fields
class my_base(osv.osv):
    _name='my.base'
_inherit='test.base'
    _columns={
        'dept':fields.char('Department'),       

        }       
my_base()     

(可以在“ded”字段之后添加新字段“dept”,也请在 xml id 上进行说明)

【问题讨论】:

  • “我对新模块 xml 感到困惑,尤其是 id 的 [原文如此]”。这不是一个问题。更具体:您遇到什么问题;你写了什么;你怎么知道它不起作用(错误、意外输出......)?
  • 这里给出了我的问题....我可以获取新模块的 xml。
  • 你的意思是想让别人为你写新模块的xml版本?这不是 StackOverflow 的用途;阅读:stackoverflow.com/help/asking

标签: python xml openerp


【解决方案1】:

在这里,您继承了test.base 模型及其功能到my.base。所以my.base 将被视为一个新模型,您已经为您的my.base 模型定义了一个新视图。您不能继承test.base 的视图。如果您尝试向test.base 模型添加新字段,则从my_base() class 中删除_name 属性或将name 属性更改为_name ='test.base'。然后你可以继承 test.base 模型的视图来添加新的字段。例如你想在 test.base 的树视图中添加新的字段 'dept',然后

<record model="ir.ui.view" id="test_base_tree_inheirt">
    <field name="name">test.base.tree</field>
    <field name="model">test.base</field>
    <field name="type">tree</field>
    <field name="inherit_id" ref="<base_module_name>.test_base_tree"/>
    <field name="arch" type="xml">
        <field name="email" position="after">
            <field name="dept"/>
        </field>
    </field>
</record>

这里的 base_module_name 是定义了 id test_base_tree 的原始视图的模块的名称。如果它在同一个模块中,则无需提供模块名称,只需提供视图 ID。这样你也可以继承表单视图。

【讨论】:

  • 非常感谢。它真的帮了我很多。用你的代码替换了我的 xml 用于树视图,并以同样的方式为表单视图做准备。我真诚地感谢您的知识。可能您可以了解初学者的情况。如果您不介意 xml,我想在哪里使用新类 my.base 。正如您在其中提到的,我无法继承测试库的视图。我怎样才能有新的看法?
  • 对于您的类 my.base,您必须定义新视图,就像模型 test.base 的视图一样。在新视图中,您可以添加 test.base 中定义的所有字段以及 my.base 中定义的字段。
  • 酷。我开始了解这个概念。再次感谢您通过修复此继承视图问题以及其他相关有用信息来帮助我。
  • 对于场景_name属性=原始类名,我观察到原始视图也随着新视图一起更新。有没有办法防止这种情况?我还注意到,当 _name 属性 != original class name 时,原始视图没有更新。
  • 如果_name属性=原始类名,并且我们继承了视图,那么原始视图将被更新。如果您愿意,您可以使用新旧字段创建新视图。然后原始(旧)视图不会受到影响。要获取新的表单视图,您需要从视图中传递 context attribute = "{'form_view_get':'.new_form_view_xmlid'}"。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多