Python:如何加入运算符?

标签 python django django-models django-i18n django-filters

我目前正在开发一个支持 i18n 的 Django 应用程序。 这是通过为给定字段的每种语言提供一个字段来实现的。

示例模型:

class Article(models.Model):
    title_en = models.CharField()
    title_de = models.CharField()
    title_fr = models.CharField()

    # etc...

(在幕后,这是使用 django-translated-fields 自动完成的)

我现在想过滤具有给定标题文章。应以每种可用语言检查 title。 (因此在本例中 title_entitle_detitle_fr)。

如果只有一个标题,我可以这样查询:

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)

关于Python:如何加入运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68577431/

相关文章:

python - 'len' 、 'dir' 、 'vars' 是什么名字?

python - binascii 出现问题。错误 : Odd-length string

python - 在 Django 中使用哪个模型字段来存储经度和纬度值?

python - 统一码编码错误 : 'ascii' codec can't encode character u'\xe9'

python - Django IntegrityError-NOT NULL 约束失败 : portfolio_myportfolio.holder_id

django - 遵循与 select_related 的子类关系

python - 如何在 txt 文件 python 中获取脚本的输出

python - 找不到 django/apache/mod_wsgi 的 .pyc 文件

python - zope.testbrowser 的代理设置

django - 以多对多关系返回代理类,Django 2.0