DJANGO перевод - Переведите модели, включая "slugs", с помощью django-datatrans - PullRequest
1 голос
/ 20 марта 2011

Я рассматриваю django-datatrans, чтобы использовать его параллельно с django-localeurl.

Я хочу перевести слагов, чтобы к моему переведенному объекту обращались следующим образом:

  • www.mysite.com / fr / bonjour (на французском)
  • www.mysite.com / ru / hello (на английском языке)

Для этого мне нужно, чтобы 'get' зависел от 'текущего языка'.

Для пояснения с примером:

Если я это сделаю: object = MyObject.objects.get (slug = slug_from_url)

Тогда «get» должен найти объект либо когда:

  • current_language - FR и slug_from_url == bonjour
  • current_language - EN и slug_from_url == привет

Мне не удается получить такое поведение, и вместо этого "get" работает только с "slug_from_url" на языке по умолчанию ... независимо от того, какой "текущий язык" используется во время выполнения.

Может быть, я подхожу к этому неправильно, поэтому любое решение приветствуется! Заранее спасибо

1 Ответ

3 голосов
/ 21 марта 2011

Самым простым решением в этом случае является запрос модели KeyValue

from datatrans.models import KeyValue
from datatrans.utils import get_current_language, get_default_language

digest = KeyValue.objects.get(value=slug_from_url, language=get_current_language()).digest
value = KeyValue.objects.get(digest=digest, language=get_default_language()).value

# value now contains 'hello'
myobject = MyObject.objects.get(slug=value)

Этот код по существу переводит вашу строку обратно на ее исходный язык, чтобы вы могли выполнить поиск.Я знаю, что это дополнительные запросы, но если у вас есть какое-то кэширование, это никак не повлияет на вашу производительность.

Вы можете поместить это в некоторую служебную функцию для лучшей возможности повторного использования.

ByКстати, Datatrans предназначен только для перевода отображаемого содержимого модели, а не полей поиска, так как это будет очень радикальным изменением в API Django QuerySet.

Надеюсь, это поможет ...

...