通过搜索字段筛选表,搜索字段位于字典中

时间:2016-04-12 07:02:57

标签: python django django-orm

我有一本字典&一个字符串值,如:

d=  {"check-in": "12-04-2016", "check-out": "13-04-2016", "location": "India"}

value = 'india'
search = d['check-in']

这里我正在读取数据库表中列名的键。

注意:这里所有内容都是动态的,这意味着列的值是动态设置的。

我想在django中使用多个过滤器进行查询,这样我将获得由字典(d)设置的所有细节。这意味着我想按多个列值进行过滤。

查询我写道:

modelInstance.objects.filter(search = value).

我在这里得到错误。

如果有人不明白,请告诉我解释更多

这里我将列名存储在如下字符串中:

 field = "check-in" 

循环for循环以获取所有列名

错误:

FieldError: Cannot resolve keyword 'field' into field

3 个答案:

答案 0 :(得分:0)

您可以使用**unpacking argument)将字典扩展为关键字参数。

在此之前,您需要将查询键转换为字段名称,例如check-incheck_in_date(假设check_in_date中的实际字段名称)

query_to_field_mapping = {
    'check-in': 'check_in_date',
    'check-out': 'check_out_date',
    'location': 'location',
}

d = {"check-in": "12-04-2016", "check-out": "13-04-2016", "location": "India"}
query = {query_to_field_mapping[key]: value for key, value in d.items()}
objects = Model.objects.filter(**query)

答案 1 :(得分:0)

试试这个

from django.db.models import Q

value = 'india'
search = 'check-in'
filter = {
    'check-in': Q(model_check-in__eq=value),
    'check-out': Q(model_check-out__eq=value),
    'location': Q(model_location__eq=value)
}


return Model.objects.filter(filter[search])

答案 2 :(得分:0)

您可以在过滤器中使用字典。

void out_characters(unsigned char *p, int n)
{
  if (n)
  {
    unsigned char *end = p+n;
    while(p < end)
      out_byte(*p++);
  }
}