如何从模型函数内部访问模型的属性

时间:2014-04-24 07:43:31

标签: openerp openerp-7

我想从函数中访问模型的属性。看一下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()

1 个答案:

答案 0 :(得分:1)

你在OpenERP中调用的大多数方法都有参数self,cr,uid,id,.... self是池(请参阅对象池模式),cr是数据库游标,uid是用户ID,ids是id或您调用方法的对象ID列表。如果您想获得订单行数,首先必须获得订单对象。您可以使用a=self.browse(cr, uid, ids, context=context)来获取ids指定的对象(或对象)。 如果idsintlong,您将获得browse_record,但如果是列表,您将获得可迭代browse_record_list(浏览记录列表)。要获得某些订单的行,您可以拨打a.order_line(如果a[0].order_line是列表,则为ids)。

因此,如果您可以获取对象的属性,则必须为browse_record调用它。