2016-05-17 16 views
1

から列をACCESは私の問題であるOdoo:私はMODEL1によ</p> <p>:ここmany2one

class model1(osv.osv): 
    _name = 'model1' 
    _columns = { 
     'name': fields.many2one('res.partner', 
             u'Person', 
             domain=[('my_boolean', '=', False)], 
             required=True, 
             select=True), 
     'type' = fields.selection([('1', 'One'), 
            ('2', 'Two'), 
            u'Select', 
            required=True), 
    } 

    @api.onchange('type') 
    def onchange_type_model1(self) 
     self.name.model3_id = 2 

そして、私は解像度でmodel3_idのIDの値のonchangeこの中で変更したいです。パートナー:このモジュールの

-res.partner:

class res_partner(osv.osv): 
    _inherit = 'res.partner' 
    _columns = { 
     'model1_partner_ids': fields.one2many('model1', 
                'name', 
                u'asker from model1', 
                select=True), 
    } 

MODEL3とモジュール内の-res.partner:

class res_partner: 
    _inherit = res.partner 
    _columns = { 
     'model3_id': fields.many2one('model3', 
              u'Model3' 
              track_visibility='onchange', 
              select=True), 
    } 

MODEL3は私がMODEL3オブジェクトの10のIDを持っていると私は、「タイプ」の場合res.partnerで、例えば、ID「2」「model3_id」に影響を与えることができるようにする必要があり、ここでは重要ではありませんモデル1で修正されました。これを行うことにより、odoo - get value from many2one field

は、私はこれを試してみました

@api.onchange('type') 
def onchange_type_demand(self, cr, uid, ids, context=None): 
    for name in self.browse(cr, uid, ids, context=context): 
     if name.model3_id: 
      name.model3_id = 2 

しかし、それは私にそのrecord.envが存在しないというエラーを与えます。私はこのエラーへの答えを見つけようとしましたが、私のコードと一致しませんでした。

私は数十のトピックを見て、それを修正するためにすべての朝を試しましたが、私が何をしても動作しません。 (私はファーストクラスで-appearやった最初の事は私がやったwrote-私にエラーを与えたが、データベースに何も変更されません。)

おかげで読書のために、あなたが提供することができます任意の助けのために。

編集:私はここでの唯一の本当の問題だと思う「many2oneの値としてIDを与えるためにどのように?」しかし、私はすべてのテキストを聞かせて、これが唯一の問題はここにあることはよく分かりません。

答えて

1

私はようやく私の問題を解決しました:あなたはのonchangeを作成するとき

、それはあなたが、他の分野でのonchangeへの感謝を変更しようとするフィールドが、ない場合はそれだけでは、JavaScriptを変更することを縫い目あなたの木では、それは変更されません。私はphppgadminを見ながら、いくつかの試みをやって、何を考え出した:あなたがあなたのフィールドを変更すると

  • 、それはJavaScriptを更新し、何もデータベースに行われません。あなたの変更を保存したら
  • 、JavaScriptの縫い目は、フィールドを分析し、それらを使用してデータベースを更新します。

xmlに何かがないときは、onchangeを使用することはできません。あなたが別のモデルやモジュールで何かを変更したい場合には、本当の痛みです。しかし、これを試すのは本当にばかげていて、それは完全に理にかなっています。オンチェンジの目的は、登録が完了する前に更新することです。

このソリューションは、Odoo 8.0 APIのおかげで非常に簡単でした。ここでexemple(これは解像度のパートナーである)である:あなたがres_partnerに作成するときに

'my_field': field.many2one(compute='_compute_second_field', store=True, readonly=True) 

@api.depends('name_ids.type') #name_ids is the one2many reverse of name's many2one in model1 
for record in self: 
    if self.name_ids: #if some names are pointing to this, name_ids is not empty 
     record.model3_id = 2 
    else: #if doesn't exist, default value 
     record.model3_id = 0 

だから、このres_partnerが値を取る、MODEL1ではまだないが「0」。そして、あなたが値を取る、モデル1から彼を削除する場合は値2を取り、モデル1でそれを追加し、「0」もう一度(削除はまだ修正され)。

for openerp-7 'fields.function'(型= 'many2one'を引数として、store = {( 'model1':_ other_function、['type']、10)}ですが、このようにして終了するように管理されているので、私はそれを表示しません。

+0

Pythonのコメントは '#'から始まり、variableという名前の変数を持つforループを使用していますので、その後「記録」する。 – CZoellner

関連する問題