我想从函数中访问模型的属性。看一下if(len(self.order_line) > 0):
我该如何正确地做到这一点?因为上面的代码不起作用。
此函数字段的目的是读取和修改同一模型的另一个属性order_line
。因此它充当简化ui的桥梁,用户只需指定一个属性单元来表示order_line
。所以我需要从函数中访问所说的order_line
。
我还希望在创建order_line
之前根据property_unit_rel
值设置sale.order
值。我如何在_property_unit_inv
函数中执行此操作?
总代码:
from osv import osv,fields
class custom_sale_order(osv.osv):
_name = "sale.order"
_inherit = 'sale.order'
def _property_unit_read(self, cr, uid, ids, property_unit_rel, arg, context):
if(len(self.order_line) > 0):
pass
else:
return None
def _property_unit_inv(self, cr, uid, ids, property_unit_rel, arg, context):
pass
#this will simplify the need of defining a sale_order_line
_columns = {
'property_unit_rel' : fields.function(
_property_unit_read,
fnct_inv = _property_unit_inv,
type='many2one',
obj="property.unit",
method=True,
string='Property'
),
}
_defaults = {
}
_sql_constraints = [
]
def init(self, cr):
pass
custom_sale_order()
答案 0 :(得分:1)
你在OpenERP中调用的大多数方法都有参数self,cr,uid,id,....
self
是池(请参阅对象池模式),cr
是数据库游标,uid
是用户ID,ids
是id或您调用方法的对象ID列表。如果您想获得订单行数,首先必须获得订单对象。您可以使用a=self.browse(cr, uid, ids, context=context)
来获取ids
指定的对象(或对象)。
如果ids
为int
或long
,您将获得browse_record
,但如果是列表,您将获得可迭代browse_record_list
(浏览记录列表)。要获得某些订单的行,您可以拨打a.order_line
(如果a[0].order_line
是列表,则为ids
)。
因此,如果您可以获取对象的属性,则必须为browse_record调用它。