我在django视图中使用字典作为过滤器,形式如下:
CI_table.objects.values(*report_fields).filter(**report_query_values)
问题是字典有一些值是列表,我得到这个错误: int()参数必须是字符串或数字,而不是' list'
我尝试做的是从request.POST创建过滤器,并且表单中的某些字段选择了多个值。 这可能是一种更好的方法,因此任何有关采取不同措施的建议都会受到赞赏。
谢谢, 艾萨克
答案 0 :(得分:1)
我认为您可以使用简单的检查轻松处理此问题,并将密钥转换为__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
种格式,这是你原本应该使用的格式。
答案 1 :(得分:1)
将__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)