【发布时间】:2021-07-29 14:05:47
【问题描述】:
我目前正在开发一个支持 i18n 的 Django 应用程序。 这是通过为给定字段的每种语言提供一个字段来实现的。
示例模型:
class Article(models.Model):
title_en = models.CharField()
title_de = models.CharField()
title_fr = models.CharField()
# etc...
(在后台这是使用django-translated-fields 自动完成的)
我现在想用给定的title 过滤Articles。 title 应检查每种可用语言。 (所以在这种情况下title_en、title_de 和title_fr)。
如果只有一个title,我可以这样查询:
Article.objects.filter(title=my_title)
我不想用这个:
Article.objects.filter(Q(title_en=my_title) | Q(title_de=my_title) | Q(title_fr=my_title))
因为这些字段是动态创建的,并且可用的语言可能会发生变化。
我的问题
我需要使用__union__ 运算符以某种方式加入课程。
我想出了这个:
Article.objects.filter(*[
Q(**{
f"name_{code}": my_name
})
for code in available_languages
])
但缺少连接。
有什么方法可以做到这一点吗?或者有没有更好的方法来过滤名字?
【问题讨论】:
标签: python django django-models django-i18n django-filters