【问题标题】:How do I make a class (that already exist) inherit another class?如何让一个类(已经存在)继承另一个类?
【发布时间】:2015-06-19 10:24:46
【问题描述】:

例如类res.partner。我希望res.partner 继承类A。我该怎么做?

我认为这行不通:

class custom_res_partner(osv.osv):

    _name           = "res.partner"
    _inherit        = "A"

custom_res_partner()

【问题讨论】:

  • 您创建名称已存在的新模型的目的是什么?

标签: openerp odoo openerp-7 odoo-8


【解决方案1】:

如果模型已经存在并且您希望它继承另一个模型,则应该这样做:

class custom_res_partner(osv.osv):
    _name = "res.partner"
    _inherit = ['res.partner', 'A']

_name 部分在这里很重要,Odoo 知道哪个模型继承自哪个模型。在_inherit 中您还需要指定res.partner,因为您正在扩展此模型。

【讨论】:

    【解决方案2】:
    class custom_res_partner(osv.osv):
    
        _name           = "custom.res.partner"    # New Model will be created
        _inherit        = "A"   # Base class 
    
    custom_res_partner()
    

    它将根据继承规则创建具有其基类的所有属性的新模型(表)。不要使用 res.partner,因为这个模型已经存在了。

    【讨论】:

    • 我希望res.partner 继承A。我不想制作新模型。
    【解决方案3】:
    # odoo-8
    from openerp import fields, models, api, _
    class res_partner(models.Model):
        _inherit = "A"
    

    编辑: (这是 odoo 版本 8) 新建一个模块,在模块的一个python文件中继承模型A。 创建新模块请参考Build an Odoo module

    【讨论】:

    • 如果我不想编辑原始文件怎么办?我希望它继承其他模型,甚至不接触原始源代码。
    • 我不认为你明白我的问题。我不想创建一个新模块。我想让预先存在的res.partner继承A而不编辑原始源代码。
    • @William 您所说的“不编辑原始源代码”是什么意思?您希望从 odoo 客户端完成。
    • 好吧,例如我有一个名为B 的类,它写在一个文件class_b.py 中,我有一个名为A 的类,它写在一个文件class_a.py 中。如何使B 继承A 而无需编辑class_b.py 并创建另一个名为custom_class_b.py 的文件。我在custom_class_b.py 中写什么?
    猜你喜欢
    • 2016-02-28
    • 2012-12-07
    • 2014-11-22
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2023-03-14
    • 2018-06-28
    • 2021-02-02
    相关资源
    最近更新 更多