1つの製品(many2one)を持つmany2oneオブジェクトを参照するmany2oneに関連するタイプshipment
のフィールドを持つオブジェクトがあります。貨物を作成すると、貨物を保存するまで商品が表示されません。また、編集の際、契約により商品が変わることはありません。product
contract
新しい製品の値を返すonchangeイベントを作成しようとしましたが、機能しませんでした。
関係が変わったときに関連フィールドを更新する方法ですか?
- モハマド
1つの製品(many2one)を持つmany2oneオブジェクトを参照するmany2oneに関連するタイプshipment
のフィールドを持つオブジェクトがあります。貨物を作成すると、貨物を保存するまで商品が表示されません。また、編集の際、契約により商品が変わることはありません。product
contract
新しい製品の値を返すonchangeイベントを作成しようとしましたが、機能しませんでした。
関係が変わったときに関連フィールドを更新する方法ですか?
さてアリ、
はい、あなたに関連するフィールドの場合、レコードを保存したときにのみ値が表示されます。レコードを保存すると、ORMは関連するフィールド値をリンクし、Webページはそれを読み戻して表示します。
しかし、はい、あなたからすぐに値を表示するにはon_change
、フィールド自体を変更するときに、任意のフィールドの値を設定できるユーザーを使用できます。
よろしく。
私はsales.order
、stock.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)" />