mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-03-16 22:10:31 +00:00
Context manager for temporarily switching fallbacks on or off.
This commit is contained in:
parent
e900ccca10
commit
7ff0506f27
3 changed files with 26 additions and 1 deletions
|
|
@ -156,7 +156,7 @@ class TranslationFieldDescriptor(object):
|
|||
# Here we check only for None and '', because e.g. 0 should not fall back.
|
||||
if val is not None and val != '':
|
||||
return val
|
||||
if self.fallback_value is None:
|
||||
if self.fallback_value is None or not mt_settings.ENABLE_FALLBACKS:
|
||||
return self.field.get_default()
|
||||
else:
|
||||
return self.fallback_value
|
||||
|
|
|
|||
|
|
@ -51,3 +51,4 @@ for key, value in FALLBACK_LANGUAGES.iteritems():
|
|||
if lang not in AVAILABLE_LANGUAGES:
|
||||
raise ImproperlyConfigured(
|
||||
'MODELTRANSLATION_FALLBACK_LANGUAGES: "%s" not in LANGUAGES setting.' % lang)
|
||||
ENABLE_FALLBACKS = getattr(settings, 'MODELTRANSLATION_ENABLE_FALLBACKS', True)
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ def resolution_order(lang, override=None):
|
|||
First is always the parameter language, later are fallback languages.
|
||||
Override parameter has priority over FALLBACK_LANGUAGES.
|
||||
"""
|
||||
if not settings.ENABLE_FALLBACKS:
|
||||
return (lang,)
|
||||
if override is None:
|
||||
override = {}
|
||||
fallback_for_lang = override.get(lang, settings.FALLBACK_LANGUAGES.get(lang, ()))
|
||||
|
|
@ -123,3 +125,25 @@ def auto_populate(mode='all'):
|
|||
yield
|
||||
finally:
|
||||
settings.AUTO_POPULATE = current_population_mode
|
||||
|
||||
|
||||
@contextmanager
|
||||
def fallbacks(enable=True):
|
||||
"""
|
||||
Temporarily switch all language fallbacks on or off.
|
||||
|
||||
Example:
|
||||
|
||||
with fallbacks(False):
|
||||
lang_has_slug = bool(self.slug)
|
||||
|
||||
May be used to enable fallbacks just when they're needed saving on some
|
||||
processing or check if there is a value for the current language (not
|
||||
knowing the language)
|
||||
"""
|
||||
current_enable_fallbacks = settings.ENABLE_FALLBACKS
|
||||
settings.ENABLE_FALLBACKS = enable
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
settings.ENABLE_FALLBACKS = current_enable_fallbacks
|
||||
|
|
|
|||
Loading…
Reference in a new issue