2

1つの製品(many2one)を持つmany2oneオブジェクトを参照するmany2oneに関連するタイプshipmentのフィールドを持つオブジェクトがあります。貨物を作成すると、貨物を保存するまで商品が表示されません。また、編集の際、契約により商品が変わることはありません。productcontract

新しい製品の値を返すonchangeイベントを作成しようとしましたが、機能しませんでした。

関係が変わったときに関連フィールドを更新する方法ですか?

  • モハマド
4

2 に答える 2

2

さてアリ、

はい、あなたに関連するフィールドの場合、レコードを保存したときにのみ値が表示されます。レコードを保存すると、ORMは関連するフィールド値をリンクし、Webページはそれを読み戻して表示します。

しかし、はい、あなたからすぐに値を表示するにはon_change、フィールド自体を変更するときに、任意のフィールドの値を設定できるユーザーを使用できます。

よろしく。

于 2012-07-23T03:51:28.407 に答える
1

私はsales.orderstock.picking標準的なオブジェクトはあなたが必要とするものに非常に近いと感じています。新しいオブジェクトを最初から作成するのではなく、標準オブジェクトを拡張する方がよいでしょう。

あなたの質問に関しては、あなたはon_change行動をとる必要があるので、あなたはうまくいかない方法を修正することを試みるべきです。6.1では、これの良い例があります。crm_baseのオブジェクトを参照してくださいcrm/crm.py

CRMリードフォームで実際の動作を確認できます):パートナーを選択すると、アドレスと電子メールが自動的に入力されます。メソッドがどのように使用されているかを確認するにはcrm_case_form_view_oppor、のビューIDも確認する必要があります。crm\crm_lead_view.xml

モデルコードは次のとおりです。

def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
    """This function returns value of partner email based on Partner Address
    :param ids: List of case IDs
    :param add: Id of Partner's address
    :param email: Partner's email ID
    """
    data = {'value': {'email_from': False, 'phone':False}}
    if add:
        address = self.pool.get('res.partner.address').browse(cr, uid, add)
        data['value'] = {'email_from': address and address.email or False ,
                         'phone':  address and address.phone or False}
    if 'phone' not in self._columns:
        del data['value']['phone']
    return data

def onchange_partner_id(self, cr, uid, ids, part, email=False):
    """This function returns value of partner address based on partner
    :param ids: List of case IDs
    :param part: Partner's id
    :param email: Partner's email ID
    """
    data={}
    if  part:
        addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
        data = {'partner_address_id': addr['contact']}
        data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
    return {'value': data}

ビューサイドコードは次のとおりです。

<field name="partner_id" select="1" colspan="2" 
  on_change="onchange_partner_id(partner_id, email_from)" string="Customer" />
<field name="partner_address_id" string="Contact" colspan="1"
  on_change="onchange_partner_address_id(partner_address_id, email_from)" />
于 2012-07-23T07:58:26.910 に答える