【问题标题】:Is it possible to use dynamic attributes with Q objects in Django 1.5.1?是否可以在 Django 1.5.1 中将动态属性与 Q 对象一起使用?
【发布时间】:2013-04-13 20:48:23
【问题描述】:

我正在使用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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这就是我要找的!它就像一个魅力。只是一个注释,而不是声明 var kwargs 我直接像这样传递字典:Q(**{field_name_contains: "some value"}) 否则它会太冗长,因为有很多 elifs :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2020-06-26
    • 2014-09-29
    • 2013-09-03
    • 2020-12-22
    • 2012-03-04
    • 1970-01-01
    相关资源
    最近更新 更多