Openerp动态域过滤器

时间:2015-08-27 14:27:31

标签: openerp

在我的课程文件夹中,有很多商品和许多金额。我需要在我的字段good_id上使用域过滤器,在该字段上我需要显示我的对象文件夹的商品列表。

所以我在我的金额类(_get_folder_list_goods)上创建了一个函数,它返回文件夹的商品列表,并在我的字段good_id中添加了一个域属性。

这是我的课程:

class folder(osv.osv):
_name = 'folder'

_columns = {

    'name' : fields.char(u'Numéro',size=50, readonly=True),
    'goods_ids': fields.many2many('good', 'doss_bien_rel', 'folder_id', 'good_id', 'Goods'),
    'amount_id': fields.one2many('amount', 'folder_id', 'Amounts'),

...}

class good(osv.osv):
_name = 'good'
_columns = {

    'name' : fields.function(_name_get_fnc, type="char", string=u''),

...}

class amount(osv.osv):
_name = 'amount'

def _get_folder_list_biens(self, cr, uid,folder_id, context={}):
    liste_goods=[]
    object_folder =  self.pool.get('folder').browse(cr,uid,folder_id,context)
    if object_folder.goods_ids:
        for good in object_folder.goods_ids:
            liste_goods.append(good.id)
    return liste_goods

_columns = {

    'folder_id': fields.many2one('folder', 'Ref folder', select=True),
    'good_id':fields.many2one('good', Goos',domain="[('id', 'in', _get_folder_list_biens(folder_id))]"),
}

我收到了这个错误:

  

未捕获错误:NameError:未定义名称'_get_folder_list_biens'

1 个答案:

答案 0 :(得分:1)

当用户开始键入(或查找)和Good时,在客户端上使用域,而它(客户端)对此方法一无所知。你需要做的是创建一个类型为many2one的函数字段,它调用_get_folder_list_biens并返回一个id列表。将新功能字段放在您的表单上是不可见的,然后创建您的域名(' id',' in',my_functional_field)