我在product_id
中定义了class sale_order_line
,如下所示:
class sale_order_line(osv.osv):
_inherit = 'sale.order.line'
def _get_product_ids(self):
return [('sale_ok', '=', True), ('state', 'in', ['sellable', 'custom']), ('id', '=', )]
_columns = {
'product_id': fields.many2one('product.product', 'Product',
domain=_get_product_ids,
change_default=True),
}
sale.order
的表单视图包含以下代码段,其中显示了product_id
:
<field name="product_id"
context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
groups="base.group_user"
on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, False, product_uos_qty, False, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/>
最初在Sale Orders(model: sale.order)
我选择pricelist_id
字段。然后,我点击“订单行”部分中的“添加项目”以添加销售订单行。在sale.order.line
的表单视图中,我只需根据之前选择的product_id
在pricelist_id
中显示产品。
在product.product
课程中,pricelist_id
是一个“虚拟”字段。所以我无法弄清楚如何添加域过滤器,因为它总是会返回空值。
是否可以帮助我帮助我在product_id
many2one字段上应用硬过滤器,以便仅显示基于父类中所选pricelist_id
的产品?
答案 0 :(得分:1)
很抱歉,但我无法完全理解你的问题。 您需要根据sale.order中设置的pricelist_id值向sale.order.line的product_id字段添加硬域。 我会引用你的话:
我只需要在'product_id'中显示产品 pricelist_id我之前选择了
据我记得在Openerp 7(以及下一个版本)上,您在价目表版本项记录中只有一个product_id字段:这意味着您必须完成此类关系product.pricelist
→product.pricelist.version
→product.pricelist.item
考虑到每个价格表可能有不同的版本,每个版本都有不同的项目。
我是对的还是我弄错了?这对我来说听起来有点疯狂:)(除非你直接在product.pricelist中创建一些函数字段)。你能更好地解释一下吗?
除此之外,在我看来,您可以使用lambda函数管理字段声明的硬域。这可以让您有机会构建更复杂的域。试一试:
class sale_order_line(osv.osv):
_inherit = 'sale.order.line'
def _get_product_ids(self, cr, uid, ids, context=None):
return [(...), (...)]
_columns = {
'product_id': fields.many2one('product.product', 'Product',
#domain=lambda self: self._get_product_ids(),
domain=lambda self: self._get_product_ids(self._cr, self._uid, [], self._context),
change_default=True
),
}
答案 1 :(得分:0)
根据我的理解,你需要依赖下拉许多人。例如,我有两个many2one字段(campus_id和department_id),我们希望在校园字段的基础上更改部门。如果你想这样做,那么下面是代码片段:
1 @api.onchange('campus_id')
2 def _campus_onchange(self):
3 res = {}
4 res['domain']={'department_id':[('campus_id', '=', self.campus_id.id)]}
5 return res