3

Я использую django modeltranslation для многоязычного сайта.Django modeltranslation quays fallback

Языковая резервная система работает хорошо при чтении атрибутов напрямую. Например, если текущий язык является немецким, и я печатаю object.title, если немецкий титул не определен, я увижу заголовок на английском языке.

Я бы ожидал, что резерв будет работать и по запросам, но это не так. На самом деле, если я делаю что-то вроде

results = MyModel.objects.filter(title = 'hello') 

этого не получите никаких результатов, если немецкое название не установлено, в то время как я хотел бы, чтобы вернуть объект с английским названием «Привет».

Как это сделать?

Заранее спасибо.

+0

Вы прочитали документацию? http://django-modeltranslation.readthedocs.org/en/latest/usage.html#fallback-languages ​​ –

+1

Конечно, в разделе Вспомогательные языки объясняют, как установить резервный заказ. И он работает при доступе к полям или использовании значений(), как описано в документации. Проблема заключается в том, что резервное копирование не применяется при использовании запросов для фильтрации. в документации нет ничего такого, поэтому я спрашивал, есть ли способ достичь этого. – sabrina

+0

Также не работает настройка MODELTRANSLATION_AUTO_POPULATE. Я установил его в true, но при сохранении объектов с переводом TranslModelForm переведенные поля не заполняются :( – sabrina

ответ

0

Здесь нужно явно запросить язык желаний. В вашем случае:

from django.db.models import Q 
# ... 
# define your query like this: 
results = MyModel.objects.filter(Q(title_de = 'hello') | Q(title_en = 'hello')) 
# supposing you have German and English languages set 

Почему эта работа? Потому что, когда вы запрашиваете конкретный язык, ModelTranslation сохраняет его. В противном случае он использует текущий язык.

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

0

Вы должны убедиться, что ваша модель зарегистрирована в translation.py

from modeltranslation.translator import register, TranslationOptions 
@register(YourModel) 
class YourModel(TranslationOptions): 
    pass 

Таким образом, все запросы, которые выполняются возвращает соответствующее поле в зависимости от языка, на котором он находится, это потому, что для регистрации создается MultilingualManager