Skip to content

Commit d42ee94

Browse files
committed
fix(dref): Change relateable models instances to starting langauge
- Refactor dref translation related models
1 parent b9f8070 commit d42ee94

2 files changed

Lines changed: 44 additions & 8 deletions

File tree

dref/serializers.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from main.writable_nested_serializers import NestedCreateMixin, NestedUpdateMixin
3939
from utils.file_check import validate_file_type
4040

41-
from .tasks import send_dref_email
41+
from .tasks import _translate_related_objects, send_dref_email
4242

4343

4444
class RiskSecuritySerializer(ModelSerializer):
@@ -1087,6 +1087,14 @@ def create(self, validated_data):
10871087
operational_update.users.add(*dref_operational_update.users.all())
10881088
operational_update.risk_security.add(*dref_operational_update.risk_security.all())
10891089
operational_update.source_information.add(*dref_operational_update.source_information.all())
1090+
1091+
# NOTE: Sync related models with the starting language
1092+
if starting_langauge != "en":
1093+
_translate_related_objects(
1094+
instance=operational_update,
1095+
auto_translate=False,
1096+
language=starting_langauge,
1097+
)
10901098
return operational_update
10911099

10921100
def update(self, instance, validated_data):
@@ -1541,6 +1549,14 @@ def create(self, validated_data):
15411549
# also update is_final_report_created for dref
15421550
dref.is_final_report_created = True
15431551
dref.save(update_fields=["is_final_report_created"])
1552+
1553+
# NOTE: Sync related models with the starting language
1554+
if starting_langauge != "en":
1555+
_translate_related_objects(
1556+
instance=dref_final_report,
1557+
auto_translate=False,
1558+
language=starting_langauge,
1559+
)
15441560
return dref_final_report
15451561

15461562
def update(self, instance, validated_data):

dref/tasks.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,25 @@ def process_dref_translation(model_name, instance_pk):
7878
return False
7979

8080

81-
def _translate_related_objects(instance, visited=None):
81+
def _translate_related_objects(
82+
instance,
83+
visited=None,
84+
auto_translate=True,
85+
language="en",
86+
):
87+
"""
88+
Sync the relateable translation fields for the given model instance.
89+
This function ensures that the translation fields are updated correctly
90+
based on the current language settings.
91+
92+
Args:
93+
instance: The model instance whose related objects need to be translated.
94+
visited: A set to keep track of visited instances to avoid infinite recursion.
95+
auto_translate: A boolean indicating whether to auto-translate related objects.
96+
language: The language code to set for the original language field.
97+
98+
"""
99+
82100
if visited is None:
83101
visited = set()
84102

@@ -102,15 +120,17 @@ def _translate_related_objects(instance, visited=None):
102120
if not field.many_to_many:
103121
if hasattr(related_value, TRANSLATOR_ORIGINAL_LANGUAGE_FIELD_NAME):
104122
model_name = get_model_name(type(related_value))
105-
translate_model_fields(model_name, related_value.pk)
106-
related_value.translation_module_original_language = "en"
123+
if auto_translate:
124+
translate_model_fields(model_name, related_value.id)
125+
related_value.translation_module_original_language = language
107126
related_value.save(update_fields=["translation_module_original_language"])
108-
_translate_related_objects(related_value, visited)
127+
_translate_related_objects(related_value, visited, auto_translate, language)
109128
else:
110129
for related_obj in related_value.all():
111130
if hasattr(related_obj, TRANSLATOR_ORIGINAL_LANGUAGE_FIELD_NAME):
112131
model_name = get_model_name(type(related_obj))
113-
translate_model_fields(model_name, related_obj.pk)
114-
related_obj.translation_module_original_language = "en"
132+
if auto_translate:
133+
translate_model_fields(model_name, related_obj.id)
134+
related_obj.translation_module_original_language = language
115135
related_obj.save(update_fields=["translation_module_original_language"])
116-
_translate_related_objects(related_obj, visited)
136+
_translate_related_objects(related_obj, visited, auto_translate, language)

0 commit comments

Comments
 (0)