I finally did it!
It feels more like a patch than anything else, but it'll do the job.
In the automation rules, I've added a “on registration” rule, for all my custom fields, with the following python code:
enfant = record.env.user.x_enfants.search([]).filtered(lambda e : e["x_name"] == record["x_name"]).filtered(lambda e : e["id"] != record['id'])
savedName = record["x_name"]
record["x_name"] = record["x_studio_parent"]
if enfant:
enfant.write({
"x_studio_age_mois" : record["x_studio_age_mois"],
"x_studio_poids_kg" : record["x_studio_poids_kg"],
"x_studio_taille_cm" : record["x_studio_taille_cm"],
"x_studio_commande" : record["x_studio_commande"],
"x_studio_parent" : enfant["x_studio_parent"],
"x_studio_notes" : record["x_studio_notes"]})
else:
record["x_name"] = savedName
In this code, we retrieve the "enfant" we're interested in with a filter. Then we edit its content with the record data.
The savedName thing is to avoid creating a new object with the x_name currently being parsed, which would belong to the current user. The “else” case is to continue managing the creation of an object in the normal way .
The only problem is that it creates objects to be destroyed afterwards that belong to the OdooBot user, so I think another automation rule to clean this up will do the trick.
For now, i have added this code arount the input :
<div class="col-sm">
<record model="x_liste_des_enfants" id="enfant.id">
<field name="x_name">
<input t-att-value="enfant.x_name" type="text" class="form-control s_website_form_input" name="x_name" placeholder="" data-fill-with="undefined"/>
</field>
</record>
<!-- <delete model="record" search="[('id','=',ref('module_name.record_id'))]"/> -->
</div>