我在django视图中使用字典作为过滤器,格式为:
CI_table.objects.values(*report_fields).filter(**report_query_values)
问题是字典中有一些值是列表,我得到了以下错误:int()参数必须是字符串或数字,而不是"list"
我想做的是根据请求创建过滤器。POST,以及表单中的某些字段选择了多个值。这可能是一种更好的方法,因此任何关于以不同方式进行操作的建议都将不胜感激。
谢谢,Isaac
将__in
查找添加到具有列表值的字段:
def make_lookup(field, value):
if isinstance(value, list):
return '%s__in' % field, value
return field, value
filter_lookups = dict(make_lookup(k, v) for k, v in
report_query_values.items())
CI_table.objects.values(*report_fields).filter(**filter_lookups)
如果密钥是列表,我认为您可以使用简单的检查并将其转换为__in
格式来非常容易地处理此问题:
for key in report_query_values:
if type(report_query_values[key]) == list:
report_query_values[key + "__in"] = report_query_values[key]
report_query_values.pop(key)
这样,如果一个特定的键有多个值,它就会被转换为attribute__in
类型的格式,这是您通常会使用的格式。