mirror of
https://github.com/SectorLabs/django-localized-fields.git
synced 2025-04-25 11:42:54 +03:00
95 lines
1.8 KiB
Python
95 lines
1.8 KiB
Python
from django.conf import settings
|
|
from django.contrib.postgres.fields.hstore import KeyTransform
|
|
from django.contrib.postgres.lookups import (
|
|
SearchLookup,
|
|
TrigramSimilar,
|
|
Unaccent,
|
|
)
|
|
from django.db.models.expressions import Col
|
|
from django.db.models.lookups import (
|
|
Contains,
|
|
EndsWith,
|
|
Exact,
|
|
IContains,
|
|
IEndsWith,
|
|
IExact,
|
|
In,
|
|
IRegex,
|
|
IsNull,
|
|
IStartsWith,
|
|
Regex,
|
|
StartsWith,
|
|
)
|
|
from django.utils import translation
|
|
|
|
|
|
class LocalizedLookupMixin:
|
|
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)
|
|
|
|
def get_prep_lookup(self):
|
|
return str(self.rhs)
|
|
|
|
|
|
class LocalizedSearchLookup(LocalizedLookupMixin, SearchLookup):
|
|
pass
|
|
|
|
|
|
class LocalizedUnaccent(LocalizedLookupMixin, Unaccent):
|
|
pass
|
|
|
|
|
|
class LocalizedTrigramSimilair(LocalizedLookupMixin, TrigramSimilar):
|
|
pass
|
|
|
|
|
|
class LocalizedExact(LocalizedLookupMixin, Exact):
|
|
pass
|
|
|
|
|
|
class LocalizedIExact(LocalizedLookupMixin, IExact):
|
|
pass
|
|
|
|
|
|
class LocalizedIn(LocalizedLookupMixin, In):
|
|
pass
|
|
|
|
|
|
class LocalizedContains(LocalizedLookupMixin, Contains):
|
|
pass
|
|
|
|
|
|
class LocalizedIContains(LocalizedLookupMixin, IContains):
|
|
pass
|
|
|
|
|
|
class LocalizedStartsWith(LocalizedLookupMixin, StartsWith):
|
|
pass
|
|
|
|
|
|
class LocalizedIStartsWith(LocalizedLookupMixin, IStartsWith):
|
|
pass
|
|
|
|
|
|
class LocalizedEndsWith(LocalizedLookupMixin, EndsWith):
|
|
pass
|
|
|
|
|
|
class LocalizedIEndsWith(LocalizedLookupMixin, IEndsWith):
|
|
pass
|
|
|
|
|
|
class LocalizedIsNullWith(LocalizedLookupMixin, IsNull):
|
|
pass
|
|
|
|
|
|
class LocalizedRegexWith(LocalizedLookupMixin, Regex):
|
|
pass
|
|
|
|
|
|
class LocalizedIRegexWith(LocalizedLookupMixin, IRegex):
|
|
pass
|