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 のスーパー メソッドを返します。また、必要に応じて if user==1 の条件を削除します。必要ありません。そうしないと、プロジェクトのすべてのリストが表示されます。

于 2013-05-16T05:18:56.813 に答える