Как да актуализирам поле, когато пиша стойност в друго поле в OpenERP 7?

Аз съм начинаещ с openerp и се опитвам как мога да знам как мога да направя код, който изчислява резултата в поле, когато пиша стойност в друго поле, пример:

field1 = 5000 

field2 = field1 * 5

Прочетох документите и опитах функции за програмиране, но винаги получавам грешка.


person GioV    schedule 15.01.2015    source източник
comment
ако получите грешка, трябва да споделите с нас. можете да създадете on_change за field1 поле, когато се промени field2 ще се актуализира. Благодаря   -  person Bhavesh Odedra    schedule 16.01.2015


Отговори (2)


onchange е решение за вашия проблем.

Ето пример в .py страна:

def onchange_field1(self, cr, uid, ids, field1, context=None):
    vals = {}
    if field1 > 0:
        vals['field12'] = field1 * 5
    return {'value': vals}

Ето пример в .xml страна:

<field name="field1" on_change="onchange_field1(field1)"/>
person Bhavesh Odedra    schedule 16.01.2015
comment
получавам тази грешка def on_change_month_wage(self, cr, uid, ids, month_wage, context=None): ^ IndentationError: unindent не съответства на външно ниво на отстъп - person GioV; 17.01.2015
comment
Това е моят код def on_change_month_wage(self, cr, uid, ids, month_wage, context=None): res = {} if month_wage › 0: res['diary_wage'] = month_wage / 30 return {'value': res} month_wage ':fields.float('Salario Mensual', digits=(16,2)), 'diary_wage':fields.function(on_change_month_wage, type = 'float', string = 'Salario Diario'), и в xml: ‹поле name=month_wage string=Salario Mensual on_change=on_change_month_wage(month_wage)/› ‹field name=diary_wage string=Salario Diario/› - person GioV; 17.01.2015
comment
Смесвате раздели и интервали. недей така конфигурирайте вашия редактор да използва само интервали за отстъп; добрият редактор ще вмъкне 4 интервала всеки път, когато използвате клавиша TAB. - person Bhavesh Odedra; 17.01.2015
comment
ако този отговор помага за решаването на въпроса ви, тогава можете да приемете отговора с отметка надясно. Благодаря - person Bhavesh Odedra; 19.01.2015
comment
това се реши малко, но сега, когато ще запазя регистъра, получавам тази грешка: TypeError: on_change_month_wage() отнема най-много 6 аргумента (7 дадени) - person GioV; 19.01.2015
comment
да, аз също давам отговор на този въпрос, но за този въпрос можете да приемете настоящия отговор. Така че друг потребител няма да даде отговор на текущия въпрос. В stackoverflow ни помага много, ако използваме този сайт по правилен начин. Харесайте, ако сме решили въпроса, след това приемете отговора. Защо не направите обиколка на SO? От дясната страна help => TOUR ще ви помогне много. - person Bhavesh Odedra; 19.01.2015

Най-накрая, след като се опитвах и опитвах в продължение на няколко дни, реших, използвах този код:

def _get_salario_diario(self, cr, uid, ids, field_name, arg, context=None):
    res= {}
    for record in self.browse(cr, uid, ids, context=context):
        res[record.id]= record.month_wage / 30
    return res
_columns = {
    'month_wage': fields.float('Salario Mensual Bs.', digits=(16,2)),
    'diary_wage': fields.function(_get_salario_diario, method=True, type='float', string='Salario Diario Bs.', store=True),
}

def onchange_month_wage(self, cr, uid, ids, month_wage, context=None):
        vals = {}
        if month_wage > 0:
            vals['diary_wage'] = salario_mensual / 30
        return {'value': vals}

и в моя xml файл

<field name='month_wage' on_change="onchange_month_wage(month_wage)"/>
<field name='diary_wage'/>

това реши проблема ми и модулът ми работи правилно, надявам се да помогне на всеки, който има нужда от него.

В края на краищата много ви благодаря за помощта!

person GioV    schedule 09.02.2015