Как обновить поле, когда я пишу значение в другом поле в 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
я получаю эту ошибку. - person GioV; 17.01.2015
comment
Это мой код определения 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: ‹field 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