Return onchange 函数的视图
Return a view from a onchange function
我想 return 来自 onchange 函数的视图,但无法重定向..
这是我的代码
@api.multi
@api.onchange('product_id')
def product_id_change(self):
model_obj = self.env['ir.model.data']
if not self.product_id:
return {'domain': {'product_uom': []}}
vals = {}
domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
if not self.product_uom or (self.product_id.uom_id.category_id.id != self.product_uom.category_id.id):
vals['product_uom'] = self.product_id.uom_id
name = product.name_get()[0][1]
if product.description_sale:
name += '\n' + product.description_sale
vals['name'] = name
self._compute_tax_id()
if self.order_id.pricelist_id and self.order_id.partner_id:
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(product.price, product.taxes_id, self.tax_id)
self.update(vals)
data_id = model_obj._get_id('hotelbeds', 'view_search_hotel')
view_ids = model_obj.browse(data_id).res_id
return {
'type': 'ir.actions.act_window',
'name': _('Hotel Search'),
'domain': domain,
'view_id' :view_ids,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'hotel.search',
'target': 'new'
}
请帮忙解决这个问题,我哪里错了或遗漏了什么?
@api.onchange
装饰方法不应该 return 任何东西。他们只是编辑您正在创建或编辑的对象的 "in memory" 版本。 Odoo 不期望该方法 return 任何东西,也不会根据方法的结果采取行动。
实现您正在做的事情的最佳方法是在产品的 select 字段旁边放置一个按钮。该按钮将调用一个方法,该方法将 return 相应的操作。
<record id="your_view" model="ir.ui.view">
<field name="name">your_view_name</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<field name="product_id"/>
<button name="redirect" string="Find hotel" type="object" class="oe_highlight"/>
</field>
</record>
并在您的模型文件中
@api.multi
def redirect(self):
model_obj = self.env['ir.model.data']
if not self.product_id:
return {'domain': {'product_uom': []}}
vals = {}
domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
if not self.product_uom or (self.product_id.uom_id.category_id.id != self.product_uom.category_id.id):
vals['product_uom'] = self.product_id.uom_id
name = product.name_get()[0][1]
if product.description_sale:
name += '\n' + product.description_sale
vals['name'] = name
self._compute_tax_id()
if self.order_id.pricelist_id and self.order_id.partner_id:
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(product.price, product.taxes_id, self.tax_id)
self.update(vals)
data_id = model_obj._get_id('hotelbeds', 'view_search_hotel')
view_ids = model_obj.browse(data_id).res_id
return {
'type': 'ir.actions.act_window',
'name': _('Hotel Search'),
'domain': domain,
'view_id' :view_ids,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'hotel.search',
'target': 'new'
}
我想 return 来自 onchange 函数的视图,但无法重定向.. 这是我的代码
@api.multi
@api.onchange('product_id')
def product_id_change(self):
model_obj = self.env['ir.model.data']
if not self.product_id:
return {'domain': {'product_uom': []}}
vals = {}
domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
if not self.product_uom or (self.product_id.uom_id.category_id.id != self.product_uom.category_id.id):
vals['product_uom'] = self.product_id.uom_id
name = product.name_get()[0][1]
if product.description_sale:
name += '\n' + product.description_sale
vals['name'] = name
self._compute_tax_id()
if self.order_id.pricelist_id and self.order_id.partner_id:
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(product.price, product.taxes_id, self.tax_id)
self.update(vals)
data_id = model_obj._get_id('hotelbeds', 'view_search_hotel')
view_ids = model_obj.browse(data_id).res_id
return {
'type': 'ir.actions.act_window',
'name': _('Hotel Search'),
'domain': domain,
'view_id' :view_ids,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'hotel.search',
'target': 'new'
}
请帮忙解决这个问题,我哪里错了或遗漏了什么?
@api.onchange
装饰方法不应该 return 任何东西。他们只是编辑您正在创建或编辑的对象的 "in memory" 版本。 Odoo 不期望该方法 return 任何东西,也不会根据方法的结果采取行动。
实现您正在做的事情的最佳方法是在产品的 select 字段旁边放置一个按钮。该按钮将调用一个方法,该方法将 return 相应的操作。
<record id="your_view" model="ir.ui.view">
<field name="name">your_view_name</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<field name="product_id"/>
<button name="redirect" string="Find hotel" type="object" class="oe_highlight"/>
</field>
</record>
并在您的模型文件中
@api.multi
def redirect(self):
model_obj = self.env['ir.model.data']
if not self.product_id:
return {'domain': {'product_uom': []}}
vals = {}
domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
if not self.product_uom or (self.product_id.uom_id.category_id.id != self.product_uom.category_id.id):
vals['product_uom'] = self.product_id.uom_id
name = product.name_get()[0][1]
if product.description_sale:
name += '\n' + product.description_sale
vals['name'] = name
self._compute_tax_id()
if self.order_id.pricelist_id and self.order_id.partner_id:
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(product.price, product.taxes_id, self.tax_id)
self.update(vals)
data_id = model_obj._get_id('hotelbeds', 'view_search_hotel')
view_ids = model_obj.browse(data_id).res_id
return {
'type': 'ir.actions.act_window',
'name': _('Hotel Search'),
'domain': domain,
'view_id' :view_ids,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'hotel.search',
'target': 'new'
}