2013-05-15 67 views
0

我需要創建many2one領域,但它應該需要根據我的邏輯函數過濾數據。它應該是selectbox也。然後如何在OpenERP版本7中實現?Many2one領域與我們自己的功能在openerp

我試着用下面的代碼。但它沒有列出,我需要。它只是加載模型中的所有值。我需要選擇框的第一個值應該被默認選中。

def _sel_proj(self, cr, uid,context=None): 
     cr.execute("""SELECT project.id,account.name FROM project_project project 
          LEFT JOIN account_analytic_account account ON account.id = project.analytic_account_id 
          LEFT JOIN project_user_rel rel ON rel.project_id = project.id 
          WHERE (account.user_id = %s or rel.uid = %s) GROUP BY project.id,account.name"""%(uid, uid)) 
     return [(r[0],r[1]) for r in cr.fetchall()] 

_name = 'mat.mgmt' 
_columns = {'project_id':fields.many2one('project.project','Project',selection=_sel_proj,select=True,required=True),} 

回答

0

您需要設置project_id是many2one並從字段定義中刪除選擇屬性。您可以通過在該字段上使用widget =「selection」屬性來從xml中進行選擇。

要獲得默認值,需要爲此設置默認函數,然後在那裏添加邏輯並使用result [0]返回其第一個值。呼叫從_defaults此功能PY是這樣的:

def _get_project(self, cr, uid, context=None): 
     #ADD YOUR LOGIC 
     return result[0] 

'project_id': _get_project 

,並顯示出有限的記錄按你的邏輯,如果可能的話,你可以將其轉換成域名,並添加PROJECT_ID場域無法從這樣的XML

domain="[('analytic_account_id.user_id','=',uid)]" 
+0

但在我的功能我正在加入三個表,其中兩個含有的用戶,我可以創造上述查詢域名嗎? –

+0

是的,你可以創建!是否有任何項目與project_user_rel的關係我的意思是從項目類,你可以訪問它嗎?我爲分析帳戶做了同樣的分析,因爲我可以發現analytic_account_id是項目中的many2one,但它是來自項目的project_user_rel的任何內容,因此您可以訪問它? –

+0

是項目表包含所有項目和分析帳戶表包含相應的項目經理和project_user_rel包含項目成員這是邏輯,在選擇框中我想顯示特定項目成員的所有項目(它可能是項目經理或項目('user') –

0

可以使用

'project_id': fields.selection(_get_project, 'Select Supplier'), 
+1

添加一些解釋給這個答案的OP。 –