具有可变列的Django查询过滤器

Ric*_*ich 53 django

我正在尝试使用过滤查询集

info=members.filter(name__contains=search_string)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道用户想要提前搜索哪个字段所以我需要用变量替换'name',如

variable_column = 'name'
search_type = 'contains'
filter = variable_column + '__' + search_type
info=members.filter(filter=search_string)
Run Code Online (Sandbox Code Playgroud)

我怎么做?

丰富

Yuj*_*ita 136

差不多了..

members.filter(**{'string__contains': 'search_string'})

要了解它正在做什么,谷歌周围 :)了解Python中的kwargs

** 将字典键/值对扩展为关键字参数 - 值对.

要使您的示例适应解决方案:

variable_column = 'name'
search_type = 'contains'
filter = variable_column + '__' + search_type
info=members.filter(**{ filter: search_string })
Run Code Online (Sandbox Code Playgroud)

  • 这可能是我很长一段时间以来看到的最好的答案。 (3认同)