From f3fc6987d80f58024c859dca609e5909b1ae963d Mon Sep 17 00:00:00 2001
From: Manon Blanco <blanco@teklia.com>
Date: Fri, 5 Nov 2021 09:38:51 +0100
Subject: [PATCH] Use select_related

---
 .../0040_use_worker_configuration.py          | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/arkindex/dataimport/migrations/0040_use_worker_configuration.py b/arkindex/dataimport/migrations/0040_use_worker_configuration.py
index ceb7dee0df..750cbfdd78 100644
--- a/arkindex/dataimport/migrations/0040_use_worker_configuration.py
+++ b/arkindex/dataimport/migrations/0040_use_worker_configuration.py
@@ -1,5 +1,7 @@
 # Generated by Django 3.2.5 on 2021-11-04 08:14
 
+from collections import defaultdict
+
 from django.db import migrations
 
 from arkindex.dataimport.utils import hash_object
@@ -9,16 +11,21 @@ def use_worker_configuration(apps, schema_editor):
     WorkerRun = apps.get_model('dataimport', 'WorkerRun')
     WorkerConfiguration = apps.get_model('dataimport', 'WorkerConfiguration')
 
-    for index, worker_run in enumerate(WorkerRun.objects.filter(configuration__isnull=True).exclude(old_configuration={})):
+    indexes = defaultdict(int)
+
+    for worker_run in WorkerRun.objects.filter(configuration__isnull=True) \
+                                       .exclude(old_configuration={}) \
+                                       .select_related('version__worker'):
         worker = worker_run.version.worker
-        worker_configuration, _ = WorkerConfiguration.objects.get_or_create(
+        worker_configuration, created = WorkerConfiguration.objects.get_or_create(
             worker=worker,
-            configuration=worker_run.old_configuration,
+            configuration_hash=hash_object(worker_run.old_configuration),
             defaults={
-                'name': f'config n°{index} - {worker.name}',
-                'configuration_hash': hash_object(worker_run.old_configuration)
+                'name': f'config for {worker.name} n°{indexes[worker.id]+1}',
+                'configuration': worker_run.old_configuration
             }
         )
+        indexes[worker.id] += created
         worker_run.configuration = worker_configuration
         worker_run.save()
 
@@ -26,7 +33,7 @@ def use_worker_configuration(apps, schema_editor):
 def use_old_configuration(apps, schema_editor):
     WorkerRun = apps.get_model('dataimport', 'WorkerRun')
 
-    worker_runs = WorkerRun.objects.filter(configuration__isnull=False)
+    worker_runs = WorkerRun.objects.filter(configuration__isnull=False).select_related('configuration')
     for worker_run in worker_runs:
         worker_run.old_configuration = worker_run.configuration.configuration
     WorkerRun.objects.bulk_update(worker_runs, ['old_configuration'])
-- 
GitLab