Python: 如何加入运营商?
Python: How to join an operator?
我目前正在开发一个支持国际化的 Django 应用程序。
这是通过为给定字段的每种语言提供一个字段来实现的。
示例模型:
class Article(models.Model):
title_en = models.CharField()
title_de = models.CharField()
title_fr = models.CharField()
# etc...
(在后台这是使用 django-translated-fields 自动完成的)
我现在想用给定的 title
筛选 Article
。 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
])
但是缺少连接。
有什么方法可以做到吗?或者是否有更好的方法来过滤名称?
如果您有可用语言列表,您可以使用:
available_languages = ['en', 'de', 'fr']
q_filter = Q(
*[<strong>Q((f'title_{code}', my_title))</strong> for code in available_languages],
<strong>_connector=Q.OR</strong>
)
Article.objects.filter(q_filter)
我目前正在开发一个支持国际化的 Django 应用程序。 这是通过为给定字段的每种语言提供一个字段来实现的。
示例模型:
class Article(models.Model):
title_en = models.CharField()
title_de = models.CharField()
title_fr = models.CharField()
# etc...
(在后台这是使用 django-translated-fields 自动完成的)
我现在想用给定的 title
筛选 Article
。 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
])
但是缺少连接。
有什么方法可以做到吗?或者是否有更好的方法来过滤名称?
如果您有可用语言列表,您可以使用:
available_languages = ['en', 'de', 'fr']
q_filter = Q(
*[<strong>Q((f'title_{code}', my_title))</strong> for code in available_languages],
<strong>_connector=Q.OR</strong>
)
Article.objects.filter(q_filter)