我正在为多语言网站使用django modeltranslation。
直接读取属性时,语言回退效果很好。 例如,如果当前语言是德语并且我打印了object.title,如果未定义德语标题,我将看到英文标题。
我希望回退也能用于查询,但事实并非如此。 事实上,如果我做了像
这样的事情results = MyModel.objects.filter(title = 'hello')
如果没有设置德语标题,这将没有结果,而我希望它返回英文标题为“hello”的对象。
我该如何做到这一点?
提前致谢。
答案 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