Ejemplo n.º 1
0
    def as_sql(self, compiler, connection):
        language = translation.get_language()
        fallback_config = getattr(settings, "LOCALIZED_FIELDS_FALLBACKS", {})
        target_languages = fallback_config.get(language, [])
        if not target_languages and language != settings.LANGUAGE_CODE:
            target_languages.append(settings.LANGUAGE_CODE)

        if language:
            target_languages.insert(0, language)

        if len(target_languages) > 1:
            return Coalesce(*[
                NullIf(KeyTransform(language, self.lhs), Value(""))
                for language in target_languages
            ]).as_sql(compiler, connection)

        return KeyTransform(target_languages[0],
                            self.lhs).as_sql(compiler, connection)
Ejemplo n.º 2
0
    def _build_search_expression(self, field_lookup):
        # TODO: is there no Django API which allows conversion of lookup to django field?
        model_field, _ = reduce(
            lambda model_tuple, field: self._get_model_field(model_tuple[1], field),
            field_lookup.split(LOOKUP_SEP),
            (None, self.model),
        )

        if isinstance(model_field, LocalizedField):
            lang = translation.get_language()
            return KeyTransform(lang, field_lookup)
        elif isinstance(model_field, JSONField):
            return Cast(field_lookup, models.TextField())

        return field_lookup
Ejemplo n.º 3
0
 def test_key_transform_raw_expression(self):
     expr = RawSQL('%s::hstore', ['x => b, y => c'])
     self.assertSequenceEqual(
         HStoreModel.objects.filter(field__a=KeyTransform('x', expr)),
         self.objs[:2])
Ejemplo n.º 4
0
 def process_lhs(self, qn, connection):
     if isinstance(self.lhs, Col):
         language = translation.get_language() or settings.LANGUAGE_CODE
         self.lhs = KeyTransform(language, self.lhs)
     return super().process_lhs(qn, connection)
Ejemplo n.º 5
0
 def as_sql(self, compiler, connection):
     language = translation.get_language() or settings.LANGUAGE_CODE
     return KeyTransform(language, self.lhs).as_sql(compiler, connection)