复制one2many字段SNAFU

时间:2013-07-18 04:44:52

标签: openerp

我需要在笔记本电脑表上显示笔记本项目的记录,但显示的记录不符合项目

我的py:

class notebook_project(osv.osv):
    _name = "notebook.project"
    _description = "Notebook Project ID"

    def onchange_project(self, cr, uid, ids, project, arg, context=None):
        if project :
            proj = self.pool.get('project.project').browse(cr, uid, project, context=context)
            return {'value': {'name': proj.name}}
        return {}
    _columns = {
        'name' : fields.char('Name', size=64),
        'project' : fields.many2one('project.project', 'Project'),
        'notebook_project_lines' : fields.one2many('notebook.project', 'notebook_project_id', 'Members Lines'),
        'notebook_project_id': fields.many2one('notebook.project', 'Parent Project', ondelete='cascade', select=True),
        'member' : fields.many2one('hr.employee', 'Members'),

        }

notebook_project()


class notebook_sheet(osv.osv):
    _name = "notebook.sheet"
    _description = "Notebook Project Sheet"

    def onchange_notebook_project(self, cr, uid, ids, notebook_project, context=None):
        res = {}
        employee_lines = []
        if not notebook_project : return {}
        if notebook_project :
            notebook_project_obj = self.pool.get('notebook.project').browse(cr, uid, notebook_project)
            for p in notebook_project_obj.notebook_project_lines:
            employee_lines.append((0,0,{'notebook_sheet_lines':p.id
            }))#this dict contain keys which are fields of one2many field 
            res['notebook_sheet_lines']=employee_lines
            return res

    def onchange_project(self, cr, uid, ids, project, context=None):
        if project :
            proj = self.pool.get('project.project').browse(cr, uid, project, context=context)
            return {'value': {'name': proj.name}}
        return {}

    #def create(self, cr, user, vals, context={}):
    #first model
    #   notebook_project_obj = self.pool.get('notebook.project')
    #browse and get o2m fields, according to your selected project(id)
    #   notebook_project_lines = notebook_project_obj.browse(cr, user, ['notebook_project_id'])[0].lines
    #copy first o2m model to second o2m model
    #   for line in notebook_project_lines :
    #       vals['notebook_sheet_lines'].append([0, False, {'notebook_project_lines':line.employee_id.id,}])
    #   return super(notebook_sheet, self).create(cr, user, vals, context)

    _columns = {
        'name' : fields.char('Name', size=64),
        'notebook_sheet_lines' : fields.many2many('notebook.project', 'notebook_project_sheet_rel', 'notebook_project', 'notebook_project_id'),
        'notebook_project': fields.many2one('notebook.project', 'Project ID',domain=[('notebook_project_id','=',False)]),
        'project' : fields.many2one('project.project', 'Project'),
        'member' : fields.many2one('hr.employee', 'Members'),

        }

notebook_sheet()

编辑我的答案,AnomA先生。仍然不确定很多很多,请好好检查一下

我是否还需要更改onhange事件?再次感谢

1 个答案:

答案 0 :(得分:0)

首先请在notebook.sheet和notebook.project之间创建一个链接。现在这两个模型之间没有联系。在notebook.project中为notebook.sheet添加many2one关系,然后将notebook_sheets_lines中的关系id更改为该字段。 否则,将notebook_sheet_lines的关系类型更改为many2many。 然后更改将返回{'value':{'notebook_sheet_lines':LIST_OF_EMPOYEEIDS}}的onchange_notebok_project() 也无需在motebook_project中添加many2many。