依赖于Odoo的选择字段之间的问题

时间:2015-03-26 03:43:46

标签: field selection v8 odoo

我在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装饰器,它会正确显示表单中第二个选择字段中的选项,但在第一个选择字段中没有捕获更改。

我希望你能帮助我,并提前感谢你。此致

1 个答案:

答案 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')]" />