2016-06-14 5 views
1

У меня есть один вид дерева имеют 3 столбца. Я хотел получить максимум каждого столбца в поле функции?Как написать максимальное значение древовидного вида в оду?

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. В этом классе у меня есть mega_wat поле здесь я ввести значения в hourly_feeder классе у меня есть одно поле, как max_wt я хотел иметь функцию поля с макс mega_wat в нем

+0

Просьба уточнить ваш вопрос – Bhanukiran

ответ

-1

Использование Встроенная функция Макс.

Помощь по встроено функции макс в модуле встроенной:

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

братан я отредактировал мой Цюнь, пожалуйста, помогите мне, как могу я максимум Г.Е. этого столбца то есть «» mege_wat –

+0

Я обновил ответ. –

+0

подход @ P.InEstiCienT - это то, что использует поиск – prakash

2

Во-первых, создать максимальную функцию в вашей модели:

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, не является итерабельным –