如何在OpenERP中使域动态化

时间:2012-11-08 10:04:29

标签: dynamic openerp

我想在视图中或.py。

中的字段定义中给出动态域方程

<field name="product_id" domain="[('name','in',get_names)]"/>

product_id是一个很多字段。

get_names是在运行时创建列表的函数。

显示错误 - “名称'get_names'未定义”

任何想法。

我也尝试了以下内容。

'product_id': fields.many2one('mymodule.relation.model','Title',selection=get_names)

这将显示mymodule.relation.model中的所有条目。它唯一能做的就是验证用户选择/提交的值是否属于'get_names'。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

1-你可以使用这样的功能字段:

def _get_domain(self, cr, uid, ids, field_name, arg, context=None):
    record_id = ids[0] 
    # do some computations....
    return {record_id: YOUR DOMAIN} 

和功能字段:

'domain_field': fields.function(_get_domain, type='char', size=255, method=True, string="Domain"),

并使用xml(domain attr)中字段的名称:

<field name="product_id" domain="domain_field" />

2-你可以使用'fields_view_get':

def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
    res = super(taskmng_task, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
    doc = etree.XML(res['arch'])
    for node in doc.xpath("//field[@name='project_id']"):
        # do some computations....
        node.set('domain', YOUR DOMAIN)
    res['arch'] = etree.tostring(doc)
    return res

答案 2 :(得分:0)

您不能在域表达式中使用函数或方法,只能使用对象字段。 它不是等价的,但最接近的是创建一个在域表达式中使用的函数字段。

答案 3 :(得分:-3)

由于不知道您的具体要求,但可能是这两个人中的任何一个可以帮助您

http://ruchir-shukla.blogspot.in/2010/11/domains-value-depending-on-condition.html

或检查更改帐户发票产品。您可以从onchange返回域。