2015-10-14 24 views
0

Я видел везде, что добавил odoo cr, uid, ids, context. кр, UID и Идентификаторы может быть понятно, но контекст для чего? почему это так важно?Контекст не обновлен в onchange method (odoo-v8)

В контексте наблюдения я обнаружил, что это простой словарь, который в основном содержит часовой пояс и лишь немного больше информации, поэтому он ограничен только этими значениями или чем-то большим, что тоже важно?

Как мы можем использовать его лучше в программировании? Каковы преимущества контекста и каковы недостатки?

Проблема

Я хочу обмениваться информацией между двумя OnChange методами, которые являются взаимозависимыми, как поле скидка и цена - (новый апи odoo8).

В то время как скидка обновляется, цена будет изменена, и в то время как цена обновленной скидки будет обновлена.

вот мой код

@api.onchange('discount') 
def discount_change(self): 
    ctx = self.env.context.copy() 
    if ctx.get('list_price_updated',False): 
     return True 
    ctx.update({'discount_updated':True}) 
    new_obj = self.with_context(ctx) 
    PPC = (self.rapnet_price + (self.rapnet_price * self.discount/100) 
    list_price = PPC * new_obj.weight 
    new_obj.price_caret = PPC 
    new_obj.list_price = list_price 

@api.onchange('list_price') 
def list_price_change(self): 
    ctx = self.env.context.copy() 
    if ctx.get('discount_updated',False): 
     return True 
    ctx.update({'list_price_updated':True}) 
    new_obj = self.with_context(ctx) 
    list_price = self.list_price/self.weight 
    new_discount = (1 - (list_price/self.rapnet_price)) * -100 
    new_obj.price_caret = list_price 
    new_obj.discount = new_discount 

new_obj = self.with_context (CTX) с помощью этой строки я получаю значение контекста, но не вызывать другие OnChange, используя себя, а не new_obj другой OnChange звонить, но контекст не будет обновляться.

ответ

1

Вы можете использовать контекст, например, для передачи данных/параметров из действий в код python. Например, в контекст вы можете установить конкретное представление для использования. Я часто использую его для изменения вида в field_view_get.

Посмотрите на это для получения дополнительной информации

What's the context?

+0

ссылка полезна, но вы действительно думаете, что контекст для обмена информацией является доверительным способом? –

+0

ну, вообще-то да, но я знаю хотя бы 1 случай, когда он не работает: [link] (http://stackoverflow.com/questions/31677549/openerp-when-in-view-mode-fields-lose-context) –

1

Контекст представляет собой словарь питона и используется для передачи определенных данных методы. Поскольку почти все методы имеют параметр контекста, вы можете использовать контекст для передачи данных с помощью нескольких уровней методов python. Например, вы можете установить значение контекста в XML-представлении и обработать его в методе write() объекта osv.

context.get ('active_id', False)

возвращает значение ключа 'active_id'. Если ключ не находится в контексте, он возвращает значение «False».

Значение в 'active_id' передается из веб-клиента и содержит идентификатор текущей выбранной записи.

больше: - Link