0

私は現在 Open ERP を使用しています。Customers/Organistion フォームにいくつかのフィールドを追加して拡張したいと思います。

Customers オブジェクト モデルは 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

ここにいくつかの問題があります:

_nameaと 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、これが実際のエラーの原因となっています。別のモデルを使用しているため、完全なフォームを作成する必要があります。上記の提案に従ってモデルから and を削除する_name_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 に答える