Django modeltranslation consultas fallback

Estoy usando django modeltranslation para un sitio multilingüe.

El lenguaje alternativo funciona bien cuando se leen atributos directamente. Por ejemplo, si el idioma actual es alemán e imprimo object.title, si el título alemán no está definido, veré el título en inglés.

Espero que el respaldo funcione también en las consultas, pero eso no es cierto. De hecho, si hago algo como

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

esto no obtendrá ningún resultado si no se establece el título alemán, mientras que me gustaría devolver el objeto con el título en inglés “hola”.

¿Cómo puedo hacer que esto funcione?

Gracias por adelantado.

Lo que hay que hacer aquí es consultar explícitamente el idioma deseado. En tu caso:

 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 

¿Por qué este trabajo? Porque cuando consulta el idioma específico, ModelTranslation lo guarda. De lo contrario utiliza el idioma actual.

¡Espero que ayude!

Debes asegurarte de que tu modelo esté registrado en translation.py

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

De esta manera, todas las consultas que se realicen devolverán el campo apropiado en función del idioma en el que se encuentre, esto se debe a que, al registrarse, se crea un MultilingualManager