Am 14.03.2014 12:14, schrieb Jean C:
>
> 2014-03-14 11:58 GMT+01:00 Cédric Krier <cedric.kr...@b2ck.com
> <mailto:cedric.kr...@b2ck.com>>:
>
>     It makes no senses to have the getter method of Function field
>     creating
>     instances.
>
>
> Well I think Sergi's use case is valid. He does not create instances,
> he just
> wants to display computed data, which is precisely the point of Function
> fields.
I think you can do it in read of the ModelView returning a list of
dictionaries with key 'id' and values for all fields_names. Also I guess
you need to implement search by your own. The getter of the
function.field need to return a dictionary with the ids you want to
compute.

An exampe what we did once (in 2.4):

class BurningtimeComputed(ModelView):
      _name = 'coating.timecomputed'

       layer = fields.Char('Coating Layer')
       oventime = fields.Integer('Oventime')
      
      def search(self, args, offset=0, limit=None, order=None, count=False,
                        query_string=False):
            return args[0][2]
     
     defread(self,ids,fields_names=None):
           pool = Pool()
           rel_obj = pool.get('coating.spec2layer')
           layer_obj = pool.get('coating.sl')
           rel = rel_obj.browse(ids)
           res = []
           ids.reverse()
           for ob in rel:
                    #do some computing
                    layer = computed
                    oventime = computed
                    dct = {'id':ob.id,
                                'layer': layer,
                                'oventime': oventime}    
                   res.append(dct)
           return res
    
class OtherModel(ModelSQL, ModelView):
         
         burning_temp =
fields.Function(fields.One2Many('coating.computed', None, 'Burning Temp'),
                                                          'get_burningtemp')

         def get_burningtemp(self, ids, name):
                res = {}
                rel_obj = Pool().get('coating.spec2layer')
                for ob in self.browse(ids):
                     # here you need to pass some ids to the first model
for computing
                     # something - we are sending ids of a other model
which
                     # keeps informations we need
                     rel = rel_obj.search([('spec', '=', ob.id),
('layer', '!=', False)])
                     res[ob.id] = rel               
                return res
        

Reply via email to