我有一个带有翻译字段的模型
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 被重复两次/三次。
我需要的是根据当前语言仅获取具有翻译字段的对象,如果没有与当前语言相关的对象,则返回后备。我怎样才能实现这个?
此页面有一个完整的教程,其中包含您问题的答案: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 时的后备语言。