1

我正在使用django-transmeta翻译字段,我需要使用这些翻译字段执行一些搜索。

假设我们有一个模型,其中包含一个名为 的可翻译字段translated_field

第一种方法中,我们可以像往常一样思考一些事情,例如:

Q(translated_field__icontains="some value")  # This fails, as `translated_field` field does not exist

第二种方法是硬编码所有可能的语言版本。例如:

Q(translated_field_en__icontains="some value")  # English version
Q(translated_field_es__icontains="some value")  # Spanish version
# Add as many as available languages

这第二个选项似乎真的是硬编码的,我想知道是否有可能的第三个选项做类似的事情:

Q(getattr("translated_field") + get_language() + "__icontains"="some value")  # pseudocode

甚至更好... **kwargs 有没有使用 Q 对象的选项?

谢谢!

4

1 回答 1

0

您可以动态生成查找参数名称,将其用作字典键,然后**kwargs在创建 Q 对象时使用。

field_name_contains = "translated_field" + get_languaage() + "__icontains")
kwargs = {field_name_contains: "some value"}
q = Q(**kwargs)
于 2013-04-20T15:41:54.107 回答