访问值中的 django 翻译字段

问题描述 投票:0回答:1

我有一个带有翻译字段的模型

class Certificate(TranslatableModel, BaseModel):
    enabled = models.BooleanField(default=True)
    translations = TranslatedFields(
        certificate_name=models.CharField(max_length=255, blank=True, default=""),
        description=models.CharField(max_length=400, blank=True, default=""),
    )
    type = models.CharField(max_length=30, null=False, blank=False)

当我尝试查询它并在 .values() 中获取证书名称时:

certificates_values_list = (
    Certificate.objects.filter(
        enabled=True
    )
    .values(
        "id",
        "type",
        "certificate_name",
    )
)

它返回一个错误,指出认证模型的certificate_name不存在。 我也尝试过:

certificates_values_list = (
    Certificate.objects.filter(
        enabled=True
    )
    .values(
        "id",
        "type",
        "translations__certificate_name",
    )
)

但它会为每个可用翻译返回一个重复实例,以便根据可用翻译,相同的证书 ID 被重复两次/三次。

我需要的是根据当前语言仅获取具有翻译字段的对象,如果没有与当前语言相关的对象,则返回后备。我怎样才能实现这个?

django django-orm django-parler
1个回答
0
投票

此页面有一个完整的教程,其中包含您问题的答案:https://pypi.org/project/django-parler/

引用教程的一段内容:

过滤翻译 要查询翻译的字段,请使用 .translated() 方法:

MyObject.objects.translated(title='cheese omelet')

要访问当前语言和可能的后备语言中的对象,请使用:

MyObject.objects.active_translations(title='cheese omelet')

这会返回被视为“活动”的语言中的对象,它们是:

- 当前语言

- PARLER_LANGUAGES 设置中 hide_untranslated=False 时的后备语言。

© www.soinside.com 2019 - 2024. All rights reserved.