2017-11-16 5 views
1

Ich versuche, meine One2Many Datensätze durchlaufen, um Doppelarbeit zu vermeiden.Schleife durch One2Many Datensätze Odoo 10

class sales_target(models.Model): 
    _name = 'sales.target' 
    _description = 'Sales Target' 

    name = fields.Char(string='Name',required=True) 
    from_date = fields.Date(string='From Date',required=True) 
    to_date = fields.Date(string='To Date',required=True) 
    sales_team = fields.Many2one('crm.team',required=True) 
    sales_record_ids = fields.One2many('sales.target.record','sales_target_rec_id',string='Sales Record') 

    @api.one 
    def check_duplication(self,result): 
     count = 0 
     if self.sales_record_ids:  
      for record in self.sales_record_ids: 
       if result.id == record.sales_person_p_id:     
        count = 1 
     if count == 0: 
      self.write({'sales_record_ids':[(0,0,{'sales_person':result.name})]})  

    @api.one  
    def get_sales_person(self): 
     for res in self.sales_team.member_ids:    
      self.check_duplication(res)   

Die andere Klasse ist als:

class sales_target_record(models.Model): 
    _name = 'sales.target.record' 

    sales_target_rec_id = fields.Many2one("sales.target")  
    sales_person = fields.Char(string='Sales Person',readonly=True,required=True) 
    sales_person_p_id = fields.Char(compute='get_value',store=True) 



@api.onchange('sales_person') 
    @api.depends('sales_person') 
    def get_value(self): 
     res = self.env['res.partner'].search([('name','=',self.sales_person)])   
     self.sales_person_p_id = res[0].id 

Nun, wenn ich die Taste am Schlagen ich noch doppelte Datensätze haben. Jedoch habe ich versucht, mit Namen und Dingen zu vergleichen, die gut arbeiten, aber ich kann nicht mit Namen vergleichen, weil es nicht korrekt ist, weil Namen gleich sein können, aber ID kann nicht. Diese Funktion war wie folgt:

@api.one 
def check_duplication(self,result): 
    count = 0 
    if self.sales_record_ids:    
     for record in self.sales_record_ids: 
      if result.name == record.sales_person:      
       count = 1 
    if count == 0:   
     self.write({'sales_record_ids':[(0,0,{'sales_person':result.name})]})  

Hoffnung für eine Anleitung zu diesem Thema.

Antwort

0

Können versuchen Sie diese

@api.multi 
def check_duplication(self,result): 
    if self.sales_record_ids:    
     for record in self.sales_record_ids: 
      if not result.name == record.sales_person:       
       self.write({'sales_record_ids':[(0,0,{'sales_person':result.name})]})  
+0

Ich habe versucht, aber gleiches Problem –

0

aus der Tatsache, dass für Schluss name es richtig funktioniert, etwas mit Ihrer if Bedingung falsch sein könnte.

sales_person_p_id ist vom Typ char, aber Sie scheinen es mit einer ganzen Zahl zu vergleichen: result.id.

Haben Sie sichergestellt, dass beide Objekte in Ihrem if Zustand von type sind?

Try sales_person_p_id ein Integer-Feld (beispielsweise über sales_person_p_id = fields.Integer(compute='get_value',store=True) oder tut irgendeine Art von Type-Casting zu machen, bevor die Objekte zu vergleichen.