2017-12-13 12 views
1

두 모델이 있습니다. 한 모델에는 One2Many 필드가 다른 하나를 가리키고 있습니다. 기본 레코드를 저장하면 One2many 관계의 레코드 하나만 저장됩니다. 'n'기록을 저장해야합니다. 어쩌면 문제는 내가 계획 한 데이터의 구조입니다.내 One2Many 필드가 두 개 이상의 레코드를 저장하지 않는 이유는 무엇입니까?

다음은 코드입니다. 변수의 스페인어 이름을 유감스럽게 생각합니다.

미리 감사드립니다.

One2Many 관계로 두 번째 클래스를 호출하는 첫 번째 클래스입니다.

클래스 EmpleadosProductos (models.Model) _name = "employee.as.product"

#the One2Many relation of the trouble 
    employee_line = fields.One2many(
     'employee.line', 
     'id', 
     string='Employee Lines', 
     store=True 
     ) 

    companyias = fields.Many2one('res.partner', 'Compañia', domain=[('is_company', '=', True)]) 
    amount_total = fields.Monetary(string='Total', store=True, readonly=True, compute='_calcularTotal') 
    journal_entry = fields.Many2one('account.move') 
    currency_id = fields.Many2one('res.currency', 'Currency', required=True, default=lambda self: self.env.user.company_id.currency_id.id) 
    fecha = fields.Date('Fecha') 
    referencia = fields.Char(string='Ref', required=True) 
    _sql_constraints = [ 
     ('refererecia_constraint', 'unique(referencia)', 'La referencia debe de ser única!'), 
    ] 
    @api.one 
    @api.depends('employee_line.total') 
     def _calcularTotal(self): 
      for empleado_obra in self: 
       acumulador = 0.0 
       for linea in empleado_obra.employee_line: 
        acumulador += linea.total 
       empleado_obra.update({ 
        'amount_total': acumulador 
       }) 

이것은 One2Many 관계 불리는 두번째 클래스이다.

class EmployeLine(models.Model): 
    _name = 'employee.line' 
    descripcion = fields.Text(string='Descripción', required=False) 
    employee_id = fields.Many2one(
     'hr.employee', 
     string="Empleado", 
     requiered=True, 
     change_default=True 
     ) 

    currency_id = fields.Many2one('res.currency', 'Currency', required=True, default=lambda self: self.env.user.company_id.currency_id.id) 
    apodo = fields.Char('apodo', readonly=False) 
    precio_por_hora = fields.Float('Sueldo/hora', store=True) 
    numero_de_horas = fields.Integer('Número de horas', store=True) 

    total = fields.Monetary(string='Total', store=True, readonly=True, compute='_calcularTotalLine') 
    _rec_name = 'apodo' 

    @api.one 
    @api.depends('numero_de_horas', 'precio_por_hora') 
     def _calcularTotalLine(self): 
      self.update({ 
        'total': (self.precio_por_hora * self.numero_de_horas) 
       }) 

    @api.onchange('employee_id') 
     def onchange_employee_id(self): 
      addr = {} 
      if not self.employee_id.display_name: 
       return addr 
      if not self.employee_id.apodo: 
       self.apodo = "no apodo" 
      else: 
       self.apodo = self.employee_id.apodo 
       self.precio_por_hora = self.employee_id.precio_por_hora 
      return addr 

답변

0

이 당신의 One2many (나는 상황을 명확하게 설명하기 위해 PARAM 이름을 추가 해요) :

# The One2Many relation of the trouble 
employee_line = fields.One2many(
    comodel_name='employee.line', 
    inverse_name='id', 
    string='Employee Lines', 
    store=True, 
) 

라는 이름의 Many2one 필드가 있음을 Odoo 이야기되는 코드를 id in employee.line 모델은 employee.as.product 모델을 가리 킵니다. 물론 employee.line 모델에는 id 필드가 있지만 ID는 employee.as.product이 아닙니다. 각 레코드의 키입니다 (이 경우 employee.line). 따라서 inverse_nameOne2many으로 설정할 수 없습니다. 수정

employee_as_product_id = fields.Many2one(
    comodel_name='employee.as.product', 
    string='Empleado/Producto', 
) 

당신의 One2many 필드 employee.as.product 모델에서이 방법 :

employee_line = fields.One2many(
    comodel_name='employee.line', 
    inverse_name='employee_as_product_id', 
    string='Employee Lines', 
    store=True, 
) 

employee.line 모델의 Many2one 필드를 만듭니다

은 당신이 원하는 것은 이것이다 One2many 필드는 expec로 작동합니다. 테드.