Как использовать одну переменную функции в другой функции того же класса в openerp? - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть одна переменная var_x в fct1.Я хочу использовать то же значение переменной в другой функции fct2 в том же классе. Код:

def onchange_blockcreate(self, cr, uid, ids, block):
    global family_code_id
    global varname        
    if block:
        cr.execute ('select activefrom,activeto from new_block where id=%s ',(block,))            
        family_code_id =cr.fetchone()[0]               
    msgalert = {'title':'Warning','message':}
    return {'warning':msgalert}
def onchange_evaluation_date(self, cr, uid, ids,family_code_id,activefrom):
    print activefrom
    print family_code_id
    if activefrom>=family_code_id:
        print activefrom          
    else :
        msgalert = {'title':'Warning','message':'fieldtocheck is too short!'}
        return {'warning':msgalert} 

Здесь family_code_id используется в первой функции, я хочу использовать тот же family_code_id во второй функции.Но он показывает ошибку:

глобальная переменная family_code_id не определена.

Как это возможно в openerp?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Вы должны определить эту переменную в классе Lable

Как ----> глобальный family_code_id, а также в метке класса, тогда она будет работать правильно

0 голосов
/ 02 марта 2012

Вы должны определить переменную внутри класса, и вы можете получить эти данные в любой из функций внутри класса, вызвав self.variable_name

0 голосов
/ 26 ноября 2011

Возможно, вы могли бы использовать глобальные переменные, но обычно есть лучший способ.

Моим первым предложением было бы передать поле family_code_id в оба on_change события. Вы беспокоитесь, что это изменится в клиенте между двумя вызовами? Если нет, просто добавьте параметр family_code_id в метод onchange_blockcreate() и добавьте family_code_id в список полей в атрибуте on_change вашего XML-файла.

Если вы решили использовать глобальную переменную, вам, вероятно, нужно объявить ее глобальной в обоих методах и назначить ее в методе onchange_evaluation_date(). Глобальные переменные, как правило, плохая идея, а переменные-члены класса, как правило, лучше. Тем не менее, классы моделей OpenERP являются синглетонами, поэтому обычно вы не хотите сохранять состояние. Все должно войти через параметры метода.

...