python - Django 模型翻译查询回退

标签 python django internationalization django-modeltranslation

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

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

我希望回退也适用于查询,但事实并非如此。 事实上,如果我做类似的事情

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

如果未设置德语标题,这将不会得到任何结果,而我希望它返回英文标题为“hello”的对象。

我怎样才能让它工作?

提前致谢。

最佳答案

不幸的是,上面的答案是错误的。正确处理这种情况的方法是

    queryset = queryset.filter(
        Q(
            Q(Q(title_fr_fr__icontains=search) & ~Q(title_fr_fr=""))
            |
            Q(Q(title_en_gb__icontains=search) & Q(title_fr_fr=""))
        )        
    )

Where fr-fr - is language we are working with now and en-gb - is our default language. This means get us those rows where title on target language contains searchable string AND title on target language is FILLED (not empty) OR where title on default language contains searchable string AND title on target language is empty.

So whole example will be looks like this:

from django.db.models import Q
###
default_lang = settings.LANGUAGE_CODE.replace("-", "_")
current_lang = get_language().replace("-", "_")

queryset = queryset.filter(
    Q(
        Q(Q(**{f'title_{current_lang}__icontains': search}) & ~Q(**{f'title_{current_lang}': ""}))
        |
        Q(Q(**{f'title_{default_lang}__icontains': search}) & Q(**{f'title_{current_lang}': ""}))
        )
    )

azuax answer 在某些情况下会给出错误的结果。 假设 title_de = 'ABC', title_en = 'DEF' 和当前语言 de。 对于搜索字符串“DEF”,我们得到这一行但不应该因为用户看到“ABC”

关于python - Django 模型翻译查询回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418377/

相关文章:

angularjs - Angular 翻译无法正确显示字符重音或元音变音

python - DataFrame 中的几何平均值

python - Python内存管理

python - 在 UpdateView 的哪个点保存数据?

java - 用于验证注释的自定义消息

javascript - 如何在处理点击事件之前等待渲染?

python - 无法理解namedtuple语法

python - 有没有办法指定接受 __init__ 值的抽象函数

python - Django 管理员 : Accesing the parent instance within an Inline admin

python - 如何从 django 过滤器集中的另一个过滤器获取值