diff --git a/arkindex/documents/api/ml.py b/arkindex/documents/api/ml.py index eb358f66e7dbd3853b8a39b9d3c8e2d273789539..ab87ada1c6076d97a1b9312b2c99739e2d687f62 100644 --- a/arkindex/documents/api/ml.py +++ b/arkindex/documents/api/ml.py @@ -192,7 +192,12 @@ class ElementTranscriptionsBulk(CreateAPIView): def get_queryset(self): if not self.request: return Element.objects.none() - return Element.objects.filter(corpus__in=Corpus.objects.writable(self.request.user)) + # Load elements and their zones from the default DB to avoid + # a stale read issue when an element is created by a worker + # and this endpoint is immediately used after to create transcriptions + return Element.objects.filter( + corpus__in=Corpus.objects.writable(self.request.user) + ).using('default').select_related('zone') def get_serializer_context(self): context = super().get_serializer_context() diff --git a/arkindex/documents/tests/test_bulk_element_transcriptions.py b/arkindex/documents/tests/test_bulk_element_transcriptions.py index 22dbc75a724f6ae81f664e9e9e3b666144eece33..33ff67d5319a80fc2ba91e258b85d54ad6fefec5 100644 --- a/arkindex/documents/tests/test_bulk_element_transcriptions.py +++ b/arkindex/documents/tests/test_bulk_element_transcriptions.py @@ -122,7 +122,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase): self.assertEqual(created_elts.count(), 1) self.client.force_login(self.internal_user) - with self.assertNumQueries(17): + with self.assertNumQueries(16): response = self.client.post( reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}), format='json', @@ -166,7 +166,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase): } self.client.force_login(self.internal_user) - with self.assertNumQueries(17): + with self.assertNumQueries(16): response = self.client.post( reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}), format='json', @@ -286,7 +286,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase): } self.client.force_login(self.internal_user) - with self.assertNumQueries(17): + with self.assertNumQueries(16): response = self.client.post( reverse('api:element-transcriptions-bulk', kwargs={'pk': self.page.id}), format='json',