2016-11-23 30 views
2

計算フィールド計算を使用してone2manyの値を設定する方法を知りたいだけです。ここに私のコードは計算されたone2manyフィールドの計算方法odoo

のpythonファイル

from openerp import models ,fields,api 
from openerp import SUPERUSER_ID 
from dateutil.relativedelta import relativedelta 
import openerp.addons.decimal_precision as dp 
import math 
import logging 
import datetime 

class extend_product_product(models.Model): 
    _inherit = 'product.product' 

    monthly_lines = fields.One2many('minmax.monthly.data','month_id', 'Monthy Sales',compute="_get_monthly_sales") 

@api.one 
def _get_monthly_sales(self): 
    vals = {} 
    vals.update({'monthly_lines':[(0,0,{'month_name_id':1,'so_qty':35})]}) 
    self.write(vals) # Also I have tried self.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35})] 

class minmax_monthly_data(models.Model): 
    _name = 'minmax.monthly.data' 

    month_id = fields.Many2one('product.product', 'Product Reference', select=True, required=True) 
    month_name_id = fields.Many2one('minmax.months','Minmax Month',required=True) 
    so_qty = fields.Float('Sales Qty', digits_compute=dp.get_precision('Product Unit of Measure'), required=True) 

XMLファイル

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
     <record model="ir.ui.view" id="product_monthly_minmax_tree"> 
      <field name="name">product.product.tree</field> 
      <field name="model">product.product</field> 
      <field name="inherit_id" ref="product.product_product_tree_view"/> 
      <field name="type">form</field> 
      <field name="arch" type="xml"> 
       <field name="ean13" position="after"> 
        <field name="monthly_lines" widget="one2many_tags" /> 
       </field> 
      </field> 
     </record> 
    </data> 
</openerp> 

ここで私は、手動でデータを挿入しようとしています。この関数は、product.productツリービューを読み込むたびに正しく呼び出されます。しかし、結果はありません。前もって感謝します。あなたのコードで

答えて

1

あなたは、レコード が定義されmany2one参照が存在しないため、このレコードは、任意のone2many たレコードにマッピングされて取得されていない理由です、属しているどの製品に指定されていません。あなたはminmax.monthly.dataモデルでをMONTH_ID設定する を必要とし、あなたが Product。商品にone2manyフィールド内のデータを参照できることを意味します。新しいAPI機能フィールドで

あなたのコードは、そのようにする必要があります...

class extend_product_product(models.Model): 
    _inherit = 'product.product' 

    monthly_lines = fields.One2many('minmax.monthly.data','month_id', 'Monthy Sales',compute="_get_monthly_sales") 

    @api.multi 
    def _get_monthly_sales(self): 
     for rec in self: 
      rec.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35, 'month_id' : rec.id})] 

直接オブジェクトに割り当てることが、私たちは古いバージョンで行ったように辞書を返す必要はありません。

これらの機能フィールドは、フィールド定義でのみstore = True属性を設定する必要があるため、データベースに格納できます。

そして、あなたはこのような状況で、我々はそれが同様に値です更新する必要があり、データベース内のフィールドを格納する場合、そのためにあなたは@api.depends('field name1','field name2')

@api.multi 
@api.depends('fieldname') 
def _get_monthly_sales(self): 
    for rec in self: 
     rec.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35,'month_id' : rec.id})] 

One2manyフィールドが自動管理することが可能で機能を飾るために必要がありますodooフレームワークで、 レコードが複数のリファレンスを設定した場合、逆モデルは1つの数多くの リレーションを持ち、それが自動的に管理されます(One2manyフィールドを定義する必要があります)。ただし、 One2manyも管理できますが、これは双方向であるため、 many2oneまたはone2manyのいずれかを管理する必要があります。

+0

同じ結果です。 minmax_monthly_dataテーブルに格納されるデータはありません。お返事をありがとうございます。その他の方法で? – balaraman

+0

多くのリファレンスを設定していませんでした。機能が更新されましたを参照してください。 'minmax.monthly.data'モデルでmany2one参照を設定するまでは、One2manyモデルでは表示されません。 –

+0

物理的なレコードがあるので、データベースにチェックインすることができます。 1つのレコードがありますが、どの製品にも関連していません。 –

関連する問題