当值为列表时,使用视图中的字典筛选器



我在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类型的格式,这是您通常会使用的格式。

最新更新