Many1one字段在openerp中具有我们自己的功能

时间:2013-05-15 04:06:58

标签: python openerp

我需要创建many2one字段。但它应该根据我的函数逻辑过滤数据。它也应该是selectbox。然后如何在OpenERP ver 7中实现它?

我尝试使用下面的代码。但它没有给出我需要的列表。它只是加载模型中的所有值。我需要默认选择选择框的第一个值。

 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),}

2 个答案:

答案 0 :(得分:0)

您需要设置project_id是many2one并从字段定义中删除选择属性。您可以使用该字段上的widget =“selection”属性从xml中进行选择。

要在默认情况下获取一个值,您需要为此创建默认函数,在那里添加逻辑并使用result [0]返回其第一个值。从py中的_defaults调用此函数,如下所示:

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

'project_id': _get_project

根据您的逻辑显示有限的记录,如果可能,您可以将其转换为域并在xml的project_id字段中添加域,如下所示

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

答案 1 :(得分:0)

您可以使用

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