OpenERP: функциональное поле

Я хочу вычислить значение поля функции, используя его предыдущее значение (= значение записи с предыдущим идентификатором)

'testrest' : fields.function(get_reste, method=True, string='Restant',type='integer'),

 def get_reste(self, cr, uid, ids, field_name, arg, context):
    x = {}
    for record in self.browse(cr, uid, ids ,context):
            if record.statut !=  'entree': 
                x[record.id]= a + record.entree_nbr # a should be the same field for the previous record

Как я могу это сделать? Спасибо


person Spirit angel    schedule 03.07.2012    source источник


Ответы (2)


Первое замечание по поводу OE 6.1+ и fields.function(): он больше не принимает параметр method [Серверная версия 3495, версия [email protected] и дополнения, версия 4844]. Поэтому, пожалуйста, больше не используйте параметр «метод»!

Теперь вы хотите рассчитать значение на основе предыдущего значения, поэтому вы можете использовать здесь параметр store=True, который будет хранить ваше предыдущее значение в данных, теперь в вашем расчете для вашей записи, вы можете прочитать предыдущее значение и вычислить новое значение и вернуть его .

'testrest' : fields.function(get_reste, store=True, string='Restant',type='integer'),

 def get_reste(self, cr, uid, ids, field_name, arg, context):
    x = {}
    for record in self.browse(cr, uid, ids ,context):
            if record.statut !=  'entree': 
                x[record.id]= record.testrest + record.entree_nbr
    return x

Здесь преимущество строки будет заключаться в том, что вы можете использовать это значение где угодно за пределами OE или для какого-либо внешнего инструмента отчетности, и вы даже можете просмотреть это поле.

Надеюсь, это поможет.

Еще немного кода:

'price': fields.function(_price_get, method=True, string="Price", store=True),
person ifixthat    schedule 03.07.2012
comment
Спасибо, сэр, за вашу помощь, но record.testrest не дает значения предыдущей записи. PS: я использую версию OE 6.0, поэтому мне нужно добавить параметр метода - person Spirit angel; 03.07.2012
comment
вам нужно использовать store = True Param для сохранения значения в db, чтобы вы могли вернуть его - person ifixthat; 03.07.2012
comment
Да, я сделал, но я не возвращаю предыдущее значение - person Spirit angel; 03.07.2012

def get_reste(self, cr, uid, ids, field_name, arg, context):
    x = {}
    a = 0.0
    for record in self.browse(cr, uid, ids ,context):
            if record.statut !=  'entree': 
                x[record.id]= a + record.entree_nbr 
                a =record.testrest
    return x

Если вам нужно, вы можете отсортировать список идентификаторов по ids.sort()

person OmaL    schedule 03.07.2012