2017-08-24 3 views
0

J'essaye de créer une fonctionnalité pour créer des instances massives à travers un assistant, assignant des valeurs à de nombreux champs many2many, mais au moment du test, je reçois une erreur:Création d'objets de bloc en affectant des valeurs à many2many champ

Singleton expected: model3(167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 188, 187, 188, 190, 191, 193, 194, 195, 1978, 1978, 2007, 1920, 202, 203, 204, 20, 20, 20, 20, 20, 20, 20, 20, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246) 

Je laisse le code au cas où vous pourriez m'aider.

class Modelo1Model(models.Model): 
    _name = 'modelo1' 

    mod1_modelo3_ids = fields.Many2many('modelo3') 

class Modelo2Model(models.Model): 
    _name = 'modelo2' 

    mod2_modelo3_ids = fields.Many2many('modelo3') 

class Modelo3Model(models.Model): 
    _name = 'modelo3' 

    #... 

class Modelo1Wizard(models.TransientModel): 
    _name = 'modelo1.wizard' 

    def _default_i(self): 
     return self.env['modelo1'].browse(self._context.get('active_ids')) 

    modelo1_ids = fields.Many2many(
     'modelo1', 
     default = _default_i) 

    @api.multi 
    def create_modelo2(self): 
     for i in self.modelo1_ids: 
      registros_many2many = i.mod2_modelo3_ids.ids 
      i.ensure_one() 
      modelo2_obj = self.env['modelo2'] 
      modelo2_vals = { 
       'mod2_modelo3_ids': registros_many2many 
       } 
      modelo2_create_id = modelo2_obj.create(modelo2_vals) 
+0

Pouvez-vous poster le message d'erreur complet? – travisw

+0

résultat = méthode (recs, * args, ** kwargs) Fichier "/opt/odoo/server/addons_custom/addons/prueba12_wizard/wizard/modelo1_wizard.py", ligne 70, à create_modelo2 « mod1_modelo3_ids, fichier «/opt/odoo/server/openerp/fields.py ", ligne 825, dans __get__ record.ensure_one() Fichier" /opt/odoo/server/openerp/models.py ", ligne 5323, dans ensure_one raise except_orm ("ValueError", "Expected singleton:% s"% self) except_orm: ('ValueError', 'Expected singleton: modelo3 (250, 252)') – Davoraf

Répondre

0

@api.multi

Lorsque vous décorez votre méthode avec ce décorateur vous laissez entendre que self sera un jeu d'enregistrements. Afin d'écrire correctement dans vos dossiers, vous devez itérer. Exemple:

@api.multi 
    def create_modelo2(self): 
     for record in self: 
      for i in record.modelo1_ids: 
+0

J'ai essayé ce que vous me disiez et l'erreur persiste. Je pense que le problème est d'essayer d'obtenir les valeurs du champ many2many: modelo2_vals = {'mod2_modelo3_ids': registros_many2many} – Davoraf

0

résolus en suivant this, montrer ici comment travailler avec des champs x2many