是否可以在Django 1.5.1中使用Q对象的动态属性?

时间:2013-04-20 15:14:00

标签: python django django-models django-1.5 django-q

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

假设我们有一个名为translated_field的可翻译字段的模型。

第一种方法中,我们可以像往常一样思考:

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

第二种方法将硬编码所有可能的语言版本。 E.g:

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

field_name_contains = "translated_field" + get_languaage() + "__icontains")
kwargs = {field_name_contains: "some value"}
q = Q(**kwargs)