我需要创建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),}
答案 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'),