0

我目前正在使用 Open ERP。我想用一些添加的字段来扩展客户/组织表单。

我的印象是客户对象模型是 res.partner。

到目前为止,这是我的代码:

from osv import fields, osv

class starstream_customers(osv.osv):
    _name = 'starstream.customers'
    _inherit = 'res.partner'
    _table = 'res_partner'
    _columns = {
        'caller_id': fields.char('Caller ID',size=128),
        'rating': fields.selection([
            ('none', '--None--'),
            ('shutdown', 'Shutdown'),
            ('aquired', 'Aquired'),
            ('active', 'Active'),
            ('cancelled', 'Project Cancelled')
            ], 'Rating'),
        'industry': fields.char('Industry',size=265),
        'type':fields.selection([
            ('supplier', 'Supplier'),
            ('customer', 'Customer'),
            ('old_customer', 'Old Customer'),
            ('supplier', 'Supplier'),
            ('customer_support_team', 'Customers Support Team'),
            ('none', '--None--'),
            ], 'Type'),
        'invoice_address': fields.char('Invoice Address',size=512),
        'employees': fields.integer('Employees'),
    }
starstream_customers()

我的视图文件:

<openerp>
    <data>
        <record model="ir.ui.view" id="view_starstream_customers">
            <field name="name">starstream.customers.tree</field>
            <field name="model">starstream.customers</field>
            <field name="inherit_id" ref="base.view_partner_form"/>
            <field name="arch" type="xml">
                <field name="name" position="after">
                    <field name="rating"/>
                </page>
            </field>
        </record>
    </data>
</openerp>

现在,我只是想在评级字段中添加,直到它工作为止。

每次我尝试重写这个时,我都会得到:

TypeError: The model "('res.partner',)" specifies an unexisting parent class "('res.partner',)"
You may need to add a dependency on the parent class' module.

我看不到哪里出错了,有人可以帮忙吗?

4

2 回答 2

4

这里有几个问题:

您已经定义了 a_name和 a_inherit并且它们具有不同的值。如果您想要的是一个名为的全新表starstream.customers,其列是res.partner模型的超集,并添加了新表,那么这没有错,但是您使用现有的 res_partner 表进行存储。

但是,如果您只想将列添加到现有的 res.parter 模型中,以便合作伙伴拥有所有现有信息以及您的新列,那么通常的模式是只拥有 _inherit 并取出 _name 和 _table。您会发现有几个地方采用这种模式,例如 stock.picking.in 和 stock.picking.out,但除非您确定自己在做什么,否则我不会推荐它。

如果您想要后者,这是 95% 的表扩展模式,请删除 _name 和 _table 属性并保留继承。

这是可选的,但如果您正在为 OpenERP 版本 7 编码,您应该继承osv.Model,而不是osv.osv. osv.osv有效,但已弃用。同样对于第 7 版,您不需要实例化您的模型。

在您的表单定义中,您正在使用模型starstream.customers,但尝试为不同的模型 ( res.partners) 继承表单,这是触发您看到的实际错误的原因。当您使用不同的模型时,您需要填写完整的表格。如果您按照上面的建议_name并从模型中删除 and _table,那么您可以将表单上的模型更改为res.partner并且它应该可以正常工作。

不知道为什么需要为上面的代码添加对 crm 的依赖,res.partner 在基本模块中。

于 2013-10-23T08:33:29.750 回答
0

确保您已crm添加到依赖项。

__openerp__.py

'depends': ['base', 'crm'],
于 2013-10-23T05:55:00.680 回答