Skip to content

Commit

Permalink
Merge pull request #398 from btoueg/patch-1
Browse files Browse the repository at this point in the history
Fix order_by with expression
  • Loading branch information
deschler committed Dec 20, 2017
2 parents 49836c2 + ff189d6 commit 00fc7f1
Showing 1 changed file with 38 additions and 24 deletions.
62 changes: 38 additions & 24 deletions modeltranslation/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,25 +54,28 @@ def get_translatable_fields_for_model(model):


def rewrite_lookup_key(model, lookup_key):
pieces = lookup_key.split('__', 1)
original_key = pieces[0]

translatable_fields = get_translatable_fields_for_model(model)
if translatable_fields is not None:
# 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 translatable_fields:
pieces[0] = build_localized_fieldname(pieces[0], get_language())

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)
# Check ``original key``, as pieces[0] may have been already rewritten.
if original_key in fields_to_trans_models:
transmodel = fields_to_trans_models[original_key]
pieces[1] = rewrite_lookup_key(transmodel, pieces[1])
return '__'.join(pieces)
try:
pieces = lookup_key.split('__', 1)
original_key = pieces[0]

translatable_fields = get_translatable_fields_for_model(model)
if translatable_fields is not None:
# 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 translatable_fields:
pieces[0] = build_localized_fieldname(pieces[0], get_language())

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)
# Check ``original key``, as pieces[0] may have been already rewritten.
if original_key in fields_to_trans_models:
transmodel = fields_to_trans_models[original_key]
pieces[1] = rewrite_lookup_key(transmodel, pieces[1])
return '__'.join(pieces)
except AttributeError:
return lookup_key


def append_fallback(model, fields):
Expand Down Expand Up @@ -123,14 +126,25 @@ def append_lookup_key(model, lookup_key):


def append_lookup_keys(model, fields):
return moves.reduce(set.union, (append_lookup_key(model, field) for field in fields), set())
new_fields = []
for field in fields:
try:
new_field = append_lookup_key(model, field)
except AttributeError:
new_field = (field,)
new_fields.append(new_field)

return moves.reduce(set.union, new_fields, set())


def rewrite_order_lookup_key(model, lookup_key):
if lookup_key.startswith('-'):
return '-' + rewrite_lookup_key(model, lookup_key[1:])
else:
return rewrite_lookup_key(model, lookup_key)
try:
if lookup_key.startswith('-'):
return '-' + rewrite_lookup_key(model, lookup_key[1:])
else:
return rewrite_lookup_key(model, lookup_key)
except AttributeError:
return lookup_key

_F2TM_CACHE = {}

Expand Down

0 comments on commit 00fc7f1

Please sign in to comment.