def rewrite_lookup_key(model, lookup_key): from linguo.models import MultilingualModel # to avoid circular import if issubclass(model, MultilingualModel): pieces = lookup_key.split('__') # If we are doing a lookup on a translatable field, we want to rewrite it to the actual field name # For example, we want to rewrite "name__startswith" to "name_fr__startswith" if pieces[0] in model._meta.translatable_fields: lookup_key = get_real_field_name(pieces[0], get_current_language()) remaining_lookup = '__'.join(pieces[1:]) if remaining_lookup: lookup_key = '%s__%s' % (lookup_key, remaining_lookup) elif pieces[0] in map(lambda field: '%s_%s' % (field, settings.LANGUAGES[0][0]), model._meta.translatable_fields): # If the lookup field explicitly refers to the primary langauge (eg. "name_en"), # we want to rewrite that to point to the actual field name. lookup_key = pieces[0][:-3] # Strip out the language suffix remaining_lookup = '__'.join(pieces[1:]) if remaining_lookup: lookup_key = '%s__%s' % (lookup_key, remaining_lookup) pieces = lookup_key.split('__') if len(pieces) > 1: # Check if we are doing a lookup to a related trans model fields_to_trans_models = get_fields_to_translatable_models(model) for field_to_trans, transmodel in fields_to_trans_models: if pieces[0] == field_to_trans: sub_lookup = '__'.join(pieces[1:]) if sub_lookup: sub_lookup = rewrite_lookup_key(transmodel, sub_lookup) lookup_key = '%s__%s' % (pieces[0], sub_lookup) break return lookup_key
def __init__(self, *args, **kwargs): self._force_language = None # Rewrite any keyword arguments for translatable fields language = get_current_language() for field in self._meta.translatable_fields: if field in kwargs.keys(): attrname = get_real_field_name(field, language) if attrname != field: kwargs[attrname] = kwargs[field] del kwargs[field] # We have to force the primary language before initializing or else # our "proxy" property will prevent the primary language values from being returned. self._force_language = get_normalized_language(settings.LANGUAGES[0][0]) super(MultilingualModel, self).__init__(*args, **kwargs) self._force_language = None
def __init__(self, *args, **kwargs): self._force_language = None # Rewrite any keyword arguments for translatable fields language = get_current_language() for field in self._meta.translatable_fields: if field in kwargs.keys(): attrname = get_real_field_name(field, language) if attrname != field: kwargs[attrname] = kwargs[field] del kwargs[field] # We have to force the primary language before initializing or else # our "proxy" property will prevent the primary language values from being returned. self._force_language = get_normalized_language( settings.LANGUAGES[0][0]) super(MultilingualModel, self).__init__(*args, **kwargs) self._force_language = None
def setter(self_reference, value): lang = self_reference._force_language or get_current_language() attrname = '%s_%s' % (field, lang) setattr(self_reference, attrname, value)
def getter(self_reference): lang = self_reference._force_language or get_current_language() attrname = '%s_%s' % (field, lang) return getattr(self_reference, attrname)