我在odoo版本8中构建了我的第一个模块。模块定义是这样的:
from datetime import datetime
from openerp import models, fields, api, _
class class_one(models.Model):
_name = 'class.one'
_inherits = {'product.product': 'prod_id'}
_description = "First class"
_order = "id asc"
def _second_field_selection(self):
query = """
SELECT features
FROM table_option_two
WHERE name = 'something'
"""
self.env.cr.execute(query)
return [(row[0], row[0]) for row in self.env.cr.fetchall()]
@api.one
@api.onchange('second_f')
def _third_field_selection(self):
t = []
if self.second_f:
query = """
SELECT cadena
FROM table_option_three
WHERE name = %s
"""
self.env.cr.execute(query, (self.second_f,))
t = [(row[0], row[0]) for row in self.env.cr.fetchall()]
return t
prod_id = fields.Many2one('product.product', string='Parent', required=True, ondelete='cascade', select=True, auto_join=True)
first_f = fields.Char(string='Name', size=15, required=True, help="First field help")
second_f = fields.Selection(string='Option_1', selection=_second_field_selection, required=True, help="Second field help")
third_f = fields.Selection(string='Option_2', selection=_third_field_selection, required=True, help="Third field help")
.
.
...
有没有办法根据值获取选择字段的值 另一个先前的选择领域?我究竟做错了什么?。 (我听到了建议)。
我注意到如果删除@ api.onchange装饰器,它会正确显示表单中第二个选择字段中的选项,但在第一个选择字段中没有捕获更改。
我希望你能帮助我,并提前感谢你。此致
答案 0 :(得分:0)
无需为这种情况编写更改方法,我已经在代码中更改了几行。试试以下。
@api.one
def _third_field_selection(self):
t = []
if self.second_f:
query = """
SELECT cadena
FROM table_option_three
"""
self.env.cr.execute(query)
t = [(row[0], row[0]) for row in self.env.cr.fetchall()]
return t
您可以简单地将xml文件添加域中的字段更改为字段,您将获得所需的结果。
<field name="third_f" domain="[('name','=','second_f')]" />