@@ -162,9 +162,13 @@ def _apply_deferred_m2o_imports(self, deferred_queue):
162162 """Resolve queued m2o imports after the main import pass."""
163163 unresolved = []
164164 for item in deferred_queue :
165- record = self .env [item ["record_model" ]].get_by_reference (
166- item ["record_reference" ]
167- )
165+ record_id = item .get ("record_id" )
166+ if record_id :
167+ record = self .env [item ["record_model" ]].browse (record_id ).exists ()
168+ else :
169+ record = self .env [item ["record_model" ]].get_by_reference (
170+ item ["record_reference" ]
171+ )
168172 target = self .env [item ["target_model" ]].get_by_reference (
169173 item ["target_reference" ]
170174 )
@@ -197,7 +201,11 @@ def _apply_deferred_x2m_imports(self, deferred_queue):
197201 unresolved = []
198202 for item in deferred_queue :
199203 owner_model = self .env [item ["record_model" ]]
200- owner_record = owner_model .get_by_reference (item ["record_reference" ])
204+ record_id = item .get ("record_id" )
205+ if record_id :
206+ owner_record = owner_model .browse (record_id ).exists ()
207+ else :
208+ owner_record = owner_model .get_by_reference (item ["record_reference" ])
201209 target_record = self .env [item ["target_model" ]].get_by_reference (
202210 item ["target_reference" ]
203211 )
@@ -228,6 +236,17 @@ def _apply_deferred_x2m_imports(self, deferred_queue):
228236 _ ("Deferred relation resolution failed:\n %(details)s" , details = details )
229237 )
230238
239+ def _tag_deferred_queue_items (self , queue , start , record_id ):
240+ """Stamp all queue items added since *start* with the owner record ID.
241+
242+ Args:
243+ queue (list): The deferred import queue (m2o or x2m).
244+ start (int): Index of the first item belonging to the current record.
245+ record_id (int): Database ID of the newly created/updated owner record.
246+ """
247+ for item in queue [start :]:
248+ item ["record_id" ] = record_id
249+
231250 def action_import_yaml (self ):
232251 """Process YAML data and create records in Odoo"""
233252
@@ -248,6 +267,8 @@ def action_import_yaml(self):
248267 with self .env .cr .savepoint ():
249268 # Process each record
250269 for record in records :
270+ m2o_start = len (deferred_m2o_queue )
271+ x2m_start = len (deferred_x2m_queue )
251272 record_reference = record .get ("reference" )
252273 if not record_reference :
253274 raise ValidationError (_ ("Record reference is missing" ))
@@ -294,6 +315,12 @@ def action_import_yaml(self):
294315 error = e ,
295316 )
296317 ) from e
318+ self ._tag_deferred_queue_items (
319+ deferred_m2o_queue , m2o_start , odoo_record .id
320+ )
321+ self ._tag_deferred_queue_items (
322+ deferred_x2m_queue , x2m_start , odoo_record .id
323+ )
297324 _logger .info (
298325 "Updated record '%s' in model '%s'" ,
299326 record_reference ,
@@ -324,6 +351,12 @@ def action_import_yaml(self):
324351 error = e ,
325352 )
326353 ) from e
354+ self ._tag_deferred_queue_items (
355+ deferred_m2o_queue , m2o_start , odoo_record .id
356+ )
357+ self ._tag_deferred_queue_items (
358+ deferred_x2m_queue , x2m_start , odoo_record .id
359+ )
327360 _logger .info (
328361 "Created record '%s' in model '%s'" ,
329362 record_reference ,
0 commit comments