2012-11-08 77 views
3

我想在.py中查看或在字段定義中給出動態域方程。如何在OpenERP中創建域動態

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

PRODUCT_ID是many2one字段。

get_names是在運行時創建列表的函數。

它顯示錯誤 - 「名 'get_names' 沒有定義」

任何想法。

我也嘗試了以下。

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

這會顯示mymodule.relation.model中的所有條目。它唯一做的是驗證用戶選擇/提交的值是否屬於'get_names'。

+0

我能知道在此基礎上get_names將創建名字? –

+0

它將在運行時搜索另一個表並構建列表並將其返回。 – Jibin

+0

您可以在字段中獲取名稱並將其分配給視圖中的域。 – Shelton

回答

-3

由於不知道你的。但可能是準確的需求從這些2任何一個可以幫助你

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

或支票賬戶產品發票平變化。您可以從onchange返回域名。

+0

我檢查了你的鏈接。它是基於條件的域。我的要求是域中的正確參數應該是動態的。 – Jibin

+0

動態但基於一些字段值?寫onchang的那場,並返回domainexample有發票系產品銷售電平變化爲了產品線電平變化 –

+0

這將是很好,包括在這裏你的答案,而不是在博客張貼的。 –

0

您不能在域表達式中使用函數或方法,只能使用對象字段。 這不是等價的,但最接近的是創建一個函數字段在域表達式中使用。

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使用字段的名稱(域名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