2016-06-14 6 views
1

私は3つの列を持つ1つのツリービューを持っています。関数のフィールドで各列の最大値を取得したかったのですか?odooでツリービューの最大値を書き込む方法は?

class feeder_data(osv.Model): 
    _name = "feeder.data" 
    _rec_name= "company_id1" 
    _columns = { 
     'company_id1': fields.many2one('res.company', 'Substation', required=True), 
     'combine2':fields.one2many('data.value','combine','Details'), 
     'max_mw': fields.function(_amount_line, string='Subtotal',type='integer'), 
      } 
class data_value(osv.Model): 
    _name = "data.value" 
    _rec_name = "mega_wat" 
    _columns={ 
     'Hours':fields.integer('Hours'), 
     'mega_wat':fields.integer('Mega Watts'), 
     'combine':fields.many2one('feeder.data','details'), 
    } 

ここで私はdata.valueのツリービューを持っています。このクラスでは、私は私は私が最高の機能を内蔵していて

+0

私は私を助けてくださいどのように私その列すなわち「mege_wat」 – Bhanukiran

答えて

-1

使用中mega_watの最大と機能分野を持っていると思ったmax_wtように、1つのフィールドを持っているhourly_feederクラスに値を入力しますここmega_watフィールドを持っています。モジュール内の組み込み関数maxに

ヘルプ組み込み

max(...) 
    max(iterable[, key=func]) -> value 
    max(a, b, c, ...[, key=func]) -> value 

    With a single iterable argument, return its largest item. 
    With two or more arguments, return the largest argument. 

それとも、独自の関数を定義することができます。

def max_number(a, b, c): 
    Max = a 
    if b > Max: 
     Max = b 
    if c > Max: 
     Max = c 
    return Max 

あなたの機能フィールドは、このようなこと

def _amount_line(self, cr, uid, ids, field_names, arg=None, context=None): 
    res = {} 
    for obj in self.browse(cr, uid, ids, context=context): 
     max = 0 
     for data in obj.combine2: 
      if data.mega_wat > max: 
       max = data.mega_wat 

     res[obj.id] = max 
    return res 
+0

仲間を詳しく説明してください。 –

+0

のGEの最大は、私は答えを更新したことができ、私のqunを編集したあなたの質問 –

+0

@ P.InEstiCienTのアプローチは、使用が探しているものです – prakash

2

まず、お使いのモデルでMAX関数を作成する必要があります。

def _get_max_of_tree(self,cr,uid,ids,context=None): 
    res={} 
    for o in self.browse(cr, uid, ids, context): 
     res[o.id] = max(0.col1 , o.col2, o.col3) 
    return res 

をそれ

_columns = { 
      ... 
      'mymax' : fields.function(_get_max_of_tree, type='float'), 
      ... 
      } 
のための機能フィールドを作成

EDIT:あなたの状況では、それは次のようにする必要があります:

class feeder_data(osv.Model): 
    _name = "feeder.data" 
    _rec_name= "company_id1" 

    def _amount_line(self,cr,uid,ids,context=None): 
     res={}   
     for fd in self.browse(cr, uid, ids, context): 
      res[fd.id] = max([dv.mega_wat for dv in fd.combine2]) 
     return res 

    _columns = { 
     'company_id1': fields.many2one('res.company', 'Substation', required=True), 
     'combine2':fields.one2many('data.value','combine','Details'), 
     'max_mw': fields.function(_amount_line, string='Subtotal',type='integer'), 
      } 
+0

pool.getが必要です。関数の引数名は何ですか?返信してください。 –

+0

同じモデルを参照している場合は、必要ありません。それらの2つの引数はここにあってはならないので、私はそれらを取り出しました:) –

+0

floatオブジェクトのようなエラーが発生することはありません –

関連する問題