通过具有搜索字段的搜索查询过滤 table 在字典中

filter the table by a search query with search fields is in a dictionary

我有一个字典和一个字符串值,例如:

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

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

在这里,我正在读取作为我的数据库中的列名的键 table。

注意:这里的一切都是动态的,这意味着列的值是动态设置的。

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

我写的查询:

modelInstance.objects.filter(search = value).

这里出现错误。

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

这里我将列名存储在一个字符串中,例如:

 field = "check-in" 

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

错误:

FieldError: Cannot resolve keyword 'field' into field

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

在此之前,您需要将查询键转换为字段名称,例如 check-in 转换为 check_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)

试试这个

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])

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

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

modelInstance.objects.filter(**d)