Openerp如何更新两个类中的字段值

时间:2016-05-18 19:35:12

标签: python python-2.7 openerp openerp-7

我目前正在处理两个课程,现在我处理得很乱。请帮我解决这个问题

我需要做的是在" roster_allocation" class想要取消他/她分配的名单,然后为了这个目的,你必须通过" roster_substitution"类,它保留原始分配的记录并替换分配和日期和时间。一旦您通过该表输入记录,我想更新该特定的" roster_allocation"使用**" roster_substitute" **表中的substitute_employee_id更新现有employee_id的表记录。

这是我的两个班级

名册分配类

   class roster_allocation(osv.osv):



         _name="roster.allocation"
         _description ="Allocate rosters on employees"

         _columns={

             'emp_id':fields.many2one('hr.employee','Employee'),
             'department_id':fields.many2one('hr.department','Department'),
             'roster_allocation_allocation':fields.one2many('roster.days.allocation','roster_allocation_connection','Days connection'),
             'roster_time':fields.char('Take the related field  roster_time.name'),
             'monthly allocation':fields.char('Month')   ,
             'roster_rest_allocation':fields.one2many('roster.rest.days','roster_id','Rest Days'),
             'roster_substitute':fields.one2many('roster.substitution','allocation_id','Substitution'),

roster_allocation()

名册天分配类(保留开始日期,名册类型和时段的记录)

class roster_days_allocation(osv.osv):
    _name="roster.days.allocation"
    _description = "To allocate days in to the already defined time slots"


    def get_domain_useer_id(self,cr,uid,ids,roster_type_list,context=None):
      mach=[]
      filter = self.pool.get('roster.type').search(cr,uid,[('id','=',roster_type_list)])
      return {'domain':{'roster_time_list':[('rostertype','=',filter)]}}


    _columns={
            'name':fields.char('Days_Allocation'),  
            'allocation_start_day':fields.date('Start Date',required=True),
            'allocation_end_day':fields.date('End Date',required=True),
            'type_connection':fields.one2many('roster.type','date_allocation_connection','Roster Type'),
            'roster_type_list':fields.many2one('roster.type','Rosters'),
            'roster_time_list':fields.many2one('roster.time','Time Slot'),

            'roster_allocation_connection':fields.many2one('roster.allocation','Allocation Connection')


              }


roster_days_allocation()

名册替换课程(保留最初分配的员工和替代员工的记录)

class roster_substitution(osv.osv):



    _name="roster.substitution"
    _description="Substituting employees "
    _columns={
             'allocation_id':fields.many2one('roster.allocation','Allocation'),
             'employee':fields.many2one('hr.employee','Employee'),
             'sub_employee':fields.many2one('hr.employee','Employee'),
             'time_slot':fields.many2one('roster.time','Roster'),
             'roster_day':fields.date('Day'),
             'reason':fields.text('Reason'),
             'department_id':fields.many2one('hr.department','Department'),


             }


    def onchange_date(self, cr, uid, ids, roster_date):
        result = {'value': {'type': False}}
        if type_id:
            type = self.pool.get('roster.time').browse(cr, uid, roster_date)
        result['value'] = {'time_slot': type.name.id}
        return result



roster_substitution()

请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

对不起,我一遍又一遍地阅读你的帖子,但我不明白你究竟想做什么(可能是因为你在代码和文本中用不同的方式命名了一些字段)。但无论如何:

我认为您必须修改emp_id课程中的roster_allocation

'emp_id': fields.function(_creation_function,
                                     type="many2one",
                                     obj='hr.employee',
                                     string='Employee', 
                                     store={
                                     'roster.substitution': (_modify_function,
                                                            ['field_that_change'], 
                                                            10)}),

使用_creation_function创建它时必须为emp_id值定义的函数。 _modify_function将在'roster.substitution'中修改field_that_change时修改emp_id的函数。

这是因为onchange不允许您从model_B修改model_A中的字段。它不会在数据库中保存任何内容,除非在屏幕上修改了由于onchange而更新的字段,然后保存。

如果你想添加一些你想要留意的字段,可以在['field_that_change', 'second_field']中添加它们,如果在同一个对象中,或者在商店中添加第二个具有相同语法的对象。