OpenERP V7 - как очистить содержимое родительского поля после запуска On_Change в widget="one2many_list"
Я пишу настраиваемый модуль Lab Test в OpenERP V7. Грубая идея была описана в OpenERP 7 - Создайте сообщение автоматического журнала в поле "Записать заметку" как запись журнала истории.
Как я могу выполнить шаг 2, когда любые изменения в любом поле полей one2many_list вызовут функцию очистки текста в моем поле "Reason For Change"(ROC), которое является родительским полем?
Следуйте за моим примером:
'note_change': fields.text('Reason For Change',required=True),
'lab_lines': fields.one2many('test.lab', 'lab_id', 'Lab Lines'),
'lab_id': fields.many2one('test.lab', 'Parent Lab', ondelete='cascade', select=True),
'product_name': fields.char('Product Name', size=64),
'product_id': fields.many2one('product.product', 'Product'),
Соответствующие функции в py будут:
def onchange_product_id(self, cr, uid, ids, product_id, name, context=None):
b_flags = False
if product_id:
prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
res_id = context.get('test', False)
if res_id:
"""
@TO trigger the function to set reason for change as empty
"""
b_flags = True
self.fnct_trigger_onchange(cr,uid,res_id,b_flags,context)
else:
#other code here
warning = { 'title': 'Warning!',
'message' : 'Please enter reason for changes.',
}
return {'value': {'product_name': prod.name, 'product_uom': prod.uom_id.id, 'product_std_cost': prod.standard_price},
'warning': warning,
}
return {}
Моя функция записи объекта здесь:
def fnct_trigger_onchange(self,cr,uid,ids,b_flags,context=None):
"""
@if b_flags is true means onchange function in this object was triggered
@if b_flags is false means onchange function in this object was not triggered
"""
res = {}
"""
@if b_flags is true then reset the Note Change field to empty
"""
if b_flags:
lab_obj= self.pool.get('test.lab')
strResetEmpty=" "
if not isinstance(ids, list):
ids = [ids]
res_vals = {'note_change':strResetEmpty
}
lab_obj.write(cr, uid, ids, res_vals, context=context)
return res
Мой XML здесь:
<?xml version="1.0" encoding="utf-8"?>
<form string="lab_form_view" version="7.0">
<notebook>
<page string="Lab Products">
<field name="lab_lines" widget="one2many_list" context="{'test':active_id}" >
<tree string="Components" editable="bottom">
<field name="product_id" required="1" context="{'default_supply_method':'produce'}" on_change="onchange_product_id(product_id, product_name, context)" />
<field name="product_name" invisible="1"/>
</tree>
</field>
</page>
</notebook>
<group colspan="4" string= "Remark Notes">
<field name="note_change" />
</group>
</form>
Благодаря этому я могу активировать функцию записи объекта в fnct_trigger_onchange при выборе нового продукта в списке one2many, чтобы очистить содержимое открытого текста в поле ROC. Однако это еще не то, что я хочу, проблема моего текущего кода в том, что текст (в поле ROC) был очищен на заднем плане, но не представлен / отражен в представлении пользователя. Пользователь все еще видел старый текст, даже если он действительно был очищен.
Я хотел бы добиться того, что в качестве метода on_change сделано, когда пользователь выбирает продукт, поле ROC будет немедленно пустым. Как я могу это сделать? Может ли кто-нибудь помочь мне в этом? Спасибо!!