0

我试图覆盖类“项目”的搜索功能来过滤项目。但它没有给出我需要的列表。它只是从模型中加载所有值。从我需要传递上下文的地方。下面给出的是我的代码

class project(osv.osv):
_name = "project.project"
_description = "Project"    
_inherits = {'account.analytic.account': "analytic_account_id",
             "mail.alias": "alias_id"}

def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
    if user == 1:
        return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
    if context and context.get('user_preference'):
            cr.execute("""SELECT project.id 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)"""%(user, user))                
            return [(r[0]) for r in cr.fetchall()]
    return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
        context=context, count=count)

_columns = {
            'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members',
        help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),

         } 
4

1 回答 1

0

您需要从 xml 代码中传递它。它应该是与 project.project 的 many2one,并在 xml 文件中添加上下文,如 context="{'test': 'yes'}" ,您可以在其中定义此字段,如下所示:

<field name="project_id" context="{'test': 'test'}"/>

通过覆盖 project.project 的搜索方法,检查此上下文。现在您应该在搜索方法中获取此上下文。

如果您获得此上下文,则触发您的查询,相应地获取结果并将其作为 id 列表返回。如果没有得到,则返回代码中指定的 project.project 的 super 方法。此外,根据您的需要删除 if user==1 的条件,您不需要它,否则它将提供所有项目列表。

于 2013-05-16T05:18:56.813 回答