当value是列表时,在视图过滤器中使用字典

时间:2015-03-25 15:14:00

标签: python django django-views

我在django视图中使用字典作为过滤器,形式如下:

CI_table.objects.values(*report_fields).filter(**report_query_values)

问题是字典有一些值是列表,我得到这个错误: int()参数必须是字符串或数字,而不是' list'

我尝试做的是从request.POST创建过滤器,并且表单中的某些字段选择了多个值。 这可能是一种更好的方法,因此任何有关采取不同措施的建议都会受到赞赏。

谢谢, 艾萨克

2 个答案:

答案 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)