Django模型转换查询回退

时间:2014-12-11 08:30:14

标签: python django internationalization django-modeltranslation

我正在为多语言网站使用django modeltranslation。

直接读取属性时,语言回退效果很好。 例如,如果当前语言是德语并且我打印了object.title,如果未定义德语标题,我将看到英文标题。

我希望回退也能用于查询,但事实并非如此。 事实上,如果我做了像

这样的事情
results = MyModel.objects.filter(title = 'hello')

如果没有设置德语标题,这将没有结果,而我希望它返回英文标题为“hello”的对象。

我该如何做到这一点?

提前致谢。

2 个答案:

答案 0 :(得分: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会保留它。否则它使用当前语言。

我希望它有所帮助!

答案 1 :(得分:0)

您必须确保您的模型已在translation.py

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

这样,所有完成的查询都会返回相应的字段,具体取决于它所使用的语言,这是因为要注册它会创建一个MultilingualManager