我正在使用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选项?
谢谢!
答案 0 :(得分:0)
您可以动态生成查找参数名称,将其用作字典键,然后在创建Q对象时使用**kwargs
。
field_name_contains = "translated_field" + get_languaage() + "__icontains")
kwargs = {field_name_contains: "some value"}
q = Q(**kwargs)