Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions tof/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
# @Date: 2019-11-17 15:02:55
# @Last Modified by: MaxST
# @Last Modified time: 2019-11-19 16:40:49
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils.translation import get_language

from .decorators import tof_filter, tof_prefetch

Expand All @@ -21,6 +23,30 @@ def exclude(self, *args, **kwargs):
def get(self, *args, **kwargs):
return super().get(*args, **kwargs)

@tof_filter # noqa
def order_by(self, *field_names):
"""Return annotate for """
from tof.models import Translation

params = []
for param in field_names:
field_name = param
desc = ''

if field_name.startswith('-'):
desc = '-'
field_name = param[1:]

self = self.annotate(**{f'_{field_name}': Translation.objects.filter(
lang__iso=get_language(), field__name=field_name, object_id=models.OuterRef('pk'),
content_type=ContentType.objects.get(model=self.model._meta.model_name,
app_label=self.model._meta.app_label)
).values_list('value', flat=True)})

# not finished, breaks down ordering by fields without any translation
params.append(f'{desc}_{field_name}')
return super().order_by(*params)


class TranslationsQuerySet(DecoratedMixIn, models.QuerySet):
pass
Expand Down