Question

J'essaie d'insérer des valeurs dans une table de relation Many2Many ou One2manhy dans Odoo (ancien OpenderP). Avez-vous une idée de comment faire cela?

Était-ce utile?

La solution

Voici un exemple du module de stock:

invoice_line_id = invoice_line_obj.create(cursor, user, {
    'name': name,
    'origin': origin,
    'invoice_id': invoice_id,
    'uos_id': uos_id,
    'product_id': move_line.product_id.id,
    'account_id': account_id,
    'price_unit': price_unit,
    'discount': discount,
    'quantity': move_line.product_uos_qty or move_line.product_qty,
    'invoice_line_tax_id': [(6, 0, tax_ids)],
    'account_analytic_id': account_analytic_id,
    }, context=context)
self._invoice_line_hook(cursor, user, move_line, invoice_line_id)

La invoice_line_tax_id le terrain est une relation plusieurs à plusieurs, et le (6, 0, tax_ids) signifie remplacer tous les enregistrements existants par ceux qui tax_ids. Parce que tu appelles create(), il n'y a rien à remplacer.

Une liste complète des options est dans le Documentation pour la classe OSV.

Pour un champ Many2Many, une liste de tuples est attendue. Voici la liste des tuple qui sont acceptés, avec la sémantique correspondante

(0, 0, { values }) lien vers un nouvel enregistrement qui doit être créé avec le dictionnaire de valeurs donné

(1, ID, { values }) Mettez à jour l'enregistrement lié avec id = id (écrire valeurs dessus)

(2, ID) Supprimez et supprimez l'enregistrement lié avec id = id (appelle le link sur id, qui supprimera complètement l'objet, et le lien vers lui aussi)

(3, ID) Coupez le lien vers l'enregistrement lié avec id = id (supprimez la relation entre les deux objets mais ne supprime pas l'objet cible lui-même)

(4, ID) lien vers l'enregistrement existant avec id = id (ajoute une relation)

(5) Désabillez tout (comme utiliser (3, id) pour tous les enregistrements liés)

(6, 0, [IDs]) Remplacez la liste des ID liés (comme l'utilisation (5) puis (4, ID) pour chaque ID dans la liste des ID)

Autres conseils

def list_customers(self, cr, uid, ids, context):
    sale_obj = self.pool.get('sale.order')
    for sale in self.browse(cr, uid, ids, context):
        sale_ids = sale_obj.search(cr, uid, [('div_code_id','=',sale.div_code_id.id),('project_user','=',sale.project_id.id),('tower_id','=',sale.tower_id.id)])
        ids_cus = []
        for cus in sale_obj.browse(cr, uid, sale_ids, context):
            if cus.partner_id.id not in ids_cus:
                ids_cus.append(cus.partner_id.id)
        self.write(cr, uid, ids, {'state_readonly':'listed','customer_ids': [(6, 0, ids_cus)]})
    return True

Vous pouvez insérer des valeurs dans un tableau de relations multiples à plusieurs dans OpenderP, veuillez consulter l'exemple ci-dessus

Lorsque nous créons le champ Many2Many, nous avons utilisé cette syntaxe:

'field_name':fields.many2many('Module_name','relation_name','self_id','module_name_id','string', 

Maintenant, vous devez vous insérer dans cette relation en exécutant des requêtes comme:

 $ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)

Mettez simplement votre champ Many2Many en vue (fichier XML) et après avoir exécuté votre module, vous pouvez voir un champ Many2Many pour insérer des enregistrements dans votre GUI

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top