Bonjour, j'aimerais savoir comment modifier une donnée d' un autre modèle après un nouvel enregistrement.
Version imprimable
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:
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:
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:
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: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.
Merci skorps!
ça marche correctement.