diff --git a/apps/utils/models.py b/apps/utils/models.py index eb41f7a1..07891330 100644 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -67,16 +67,23 @@ def get_default_locale(): settings.FALLBACK_LOCALE -def translate_field(self, field_name): +def translate_field(self, field_name, toggle_field_name=None): def translate(self): field = getattr(self, field_name) + toggler = getattr(self, toggle_field_name, None) if isinstance(field, dict): + if toggler: + field = {locale: v for locale, v in field.items() if toggler.get(locale) in [True, 'True', 'true']} value = field.get(to_locale(get_language())) # fallback if value is None: value = field.get(get_default_locale()) if value is None: - value = field.get(next(iter(field.keys()), None)) + try: + value = next(iter(field.values())) + except StopIteration: + # field values are absent + return None return value return None return translate @@ -114,7 +121,7 @@ class TranslatedFieldsMixin: field_name = field.name if isinstance(field, TJSONField): setattr(cls, f'{field.name}_translated', - property(translate_field(self, field_name))) + property(translate_field(self, field_name, f'locale_to_{field_name}_is_active'))) setattr(cls, f'{field_name}_indexing', property(index_field(self, field_name)))