Bonjour, j'aimerais savoir comment modifier une donnée d' un autre modèle après un nouvel enregistrement.
Bonjour, j'aimerais savoir comment modifier une donnée d' un autre modèle après un nouvel enregistrement.
Bonjour,
Cela est possible en créant un nouveau module qui héritera du modèle de données que vous créez. Dans ce nouveau module, vous écrirez une fonction Python qui héritera de la fonction parente create et dans laquelle vous modifierez l'autre modèle. Par exemple :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @api.model @api.returns('self', lambda rec: rec.id) def create(self, values): res = super(VotreModele, self).create(values) self.env['autre.modele'].browse([id_a_modifier]).champ = "nouvelle_valeur" return res
Bonjout Skorps!
merci pour ta reponse. Mais quand je l'applique ça me donne aucun resultat. ci dessous mon code
ce que je voudrais, lorsque je cree un "modele un", pour voir modifier le champ etat au niveau de "modele 2"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class modele_un(osv.osv): _name = 'modele.un' _description = u"table un" _columns = { 'name': fields.char(u" Nom ", size=50, required=True), 'modelDeux_ids': fields.one2many('modele.deux', 'modeleDeux_id'), 'dateAcquisition': fields.date(u"Date d'acqu.", required=True), 'dateMiseEnService': fields.date(u"Date mise en service", required=False), 'etat': fields.char(u"Etat", size=32, required=True), 'note': fields.text('Note') } modele_un() class modele_deux(osv.osv): _name = 'modele.deux' _description = u"Table deux" _columns = { 'modeleUn_id':fields.many2one('modele.un', 'nom', required=True), 'date': fields.date(u"Date ", required=True), 'valeur': fields.float(u"Valeur", required=False), 'note': fields.text('Note'), } @api.model @api.returns('self', lambda rec: rec.id) def create(self, values): res = super(modele.deux, self).create(values) self.env['modele.un'].browse([5]).etat = "test" return res medele_deux()
Bonjour,
L'exemple de code a quelques soucis, notamment le second appel à classe, qui souffre d'une typographie (medele). De plus si vous définissez vous même les classes, vous pouvez directement modifier le comportement de la 1re sans avoir besoin d'hériter comme je l'avais suggéré.
Un exemple rapide avec la nouvelle API (dont est issue le code que je vous avais proposé).
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class ModeleUn(models.Model): _name = 'modele.un' _description = u'table un' name = fields.Char(u'Nom', size=50, required=True) modelDeux_ids = fields.One2many('modele.deux', 'modeleUn_id') dateAcquisition = fields.Date(u'Date d\'acqu.', required=True) dateMiseEnService = fields.Date(u'Date mise en service', required=False) etat = fields.Char(u'Etat', size=32, required=True) note = fields.Text(u'Note') class ModeleDeux(models.Model): _name = 'modele.deux' _description = u'Table deux' modeleUn_id = fields.Many2one('modele.un', string='nom', required=True) date = fields.Date(u'Date', required=True) valeur = fields.Float(u'Valeur', required=False) note = fields.Text('Note') @api.model @api.returns('self', lambda rec: rec.id) def create(self, values): res = super(ModeleDeux, self).create(values) self.env['modele.un'].browse([5]).etat = "test" return res
Cela devrait fonctionner quand vous créerez un modèle deux, l’enregistrement avec pour identifiant 5 du modèle un sera modifié.
Si vous voulez que ce soit l'enregistrement lié, il faudra remplacer la ligne self.env['modele.un'].browse([5]).etat = "test" par
Code python : Sélectionner tout - Visualiser dans une fenêtre à part res.modeleUn_id.etat = 'test'
Désolé je n'ai pas le temps de vérifier que tout fonctionne comme attendu mais cela devrait, je l'espère, vous aider.
Bon courage.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager