Python Django modeltranslation查询回退

Python Django modeltranslation查询回退,python,django,internationalization,django-modeltranslation,Python,Django,Internationalization,Django Modeltranslation,我正在为一个多语言网站使用django modeltranslation 直接读取属性时,语言回退效果很好。 例如,如果当前语言是德语,我打印object.title,如果德语标题未定义,我将看到英语标题 我希望回退也能处理查询,但事实并非如此。 事实上,如果我做了类似的事情 results = MyModel.objects.filter(title = 'hello') 如果未设置德语标题,则不会得到任何结果,而我希望它返回具有英语标题“hello”的对象 我怎样才能做到这一点 提前感谢。

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

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

我希望回退也能处理查询,但事实并非如此。 事实上,如果我做了类似的事情

results = MyModel.objects.filter(title = 'hello')
如果未设置德语标题,则不会得到任何结果,而我希望它返回具有英语标题“hello”的对象

我怎样才能做到这一点


提前感谢。

这里要做的事情是显式地查询desire语言。就你而言:

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会保留它。否则,它将使用当前语言


我希望有帮助

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

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

通过这种方式,所有完成的查询都将返回相应的字段,具体取决于所使用的语言,这是因为注册该字段是由多语言管理器创建的

您是否阅读了文档?当然,回退语言部分解释了如何设置回退顺序。如文档中所述,它在访问字段或使用values()时工作。问题是,在使用查询集进行筛选时,回退不适用。文档中没有这方面的需求,所以我问是否有办法实现这一点。而且MODELTRANSLATION\u AUTO\u POPULATE设置似乎不起作用。我将其设置为true,但在使用TranslationModelForm保存对象时,未填充已翻译字段:(谢谢您的提问,我也有同样的问题!在文档中也找不到任何内容。您找到解决此问题的方法了吗?