我正在尝试根据其订单项的属性过滤采购订单。因此,例如,我想查看所有具有 product_type = 'X' 的订单项的采购订单。
<record id="po_x" model="ir.actions.act_window">
<field name="name">X Purchase Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="domain">[('has_x_line','=',True)]</field>
<field name="context">{}</field>
</record>
product_type 是我添加到订单行的继承版本的自定义字段。
class purchase_order_custom(osv.osv):
_name = 'purchase.order'
_inherit = 'purchase.order'
def linehasproducttype(self, cr, uid, ids, name, arg, context=None):
cur_obj={}
cur_obj=self.browse(cr, uid, ids, context=context)
for line in cur_obj.order_line:
if line.product_type == 'X':
return True
return False
_columns={
'has_x_line': fields.function(linehasproducttype, string="Has X Line", type='boolean', context={'pt':'X'})
}
purchase_order_custom()
2个问题:
Q1。上面的代码不起作用。也就是说,它并没有真正按照需要进行过滤。有什么问题?
Q2。我有很多产品类型,我不倾向于为每种类型制作一个功能。我可以以某种方式传递参数或使用上下文来达到这个目的吗?如果是这样,我如何在代码中使用它?
谢谢
编辑:我也尝试过以下代码,但没有成功:
def linehasproducttype(self, cr, uid, ids, name, arg, context=None):
res = dict.fromkeys(ids, False)
for cur_obj in self.browse(cr, uid, ids, context=context):
res[cur_obj.id] = False
for line in cur_obj.order_line:
if line.product_type == 'X':
res[cur_obj.id] = True
return res