自定义字段默认值 - 填充来自同一字段的其他条目

时间:2015-09-11 14:46:33

标签: openerp odoo odoo-8

我在产品屏幕上创建了一个带有额外字段的自定义模块。我试图将默认值设为下拉列表,其中包含已提交到该字段的所有条目或创建新条目的选项(与将产品添加到BOM时的默认值相同)。

class product_part_detail(osv.osv):
    _inherit = 'product.template'

    _columns = {
    'x_mfrname1': fields.char('P/N'),
    }

    _defaults ={
    'x_mfrname1': get_default_name,
    }

def get_default_name(self):
    return "test"

我尝试创建一个many2one字段,该字段引用不同表中的字段,但在尝试安装模块时我一直收到错误。以下是我遇到问题的更新代码。提前谢谢!

class product_part_detail(osv.osv):
    _inherit = 'product.template'
    _name = 'product.part.detail'

    _columns = {
    'x_mfrname1': fields.many2one('product.part.detail.fill', 'x_mfrname1id'),
    'x_mfrname2': fields.many2one('product.part.detail.fill', 'x_mfrname1id'),
}

class product_part_detail_fill(osv.osv):
    _name = 'product.part.detail.fill'

def _sel_func(self, cr, uid, context=None):
    obj = self.pool.get('product.part.detail')
    ids = obj.search(cr, uid, [])
    res = obj.read(cr, uid, ids, ['x_mfrname1', 'x_mfrname2'], context)
    res = [(r['x_mfrname1'], r['x_mfrname2']) for r in res]
    return res

_columns = {
    'x_mfrname1id': fields.one2many('product.part.detail', 'x_mfrname1', 'x_mfrname2', selection=_sel_func),
}

1 个答案:

答案 0 :(得分:1)

有几件事。下拉它们先前输入的值的想法需要many2one字段。您将创建另一个模型,然后使x_mfrname1成为该表的many2one。只要用户在该表上创建了访问权限,他们就会在下拉列表中获得关键新值的创建选项。

另外一项,因为您使用的是pre-8 API,默认方法的方法签名应为:

def get_default_name(self, cr, uid, context=None):