假设输入为,
f = ['f0_0', 'f1_0', 'f1_1', 'f2_0', 'f2_1', 'f2_2']
如何以下列方式创建查询
model.objects.filter(Q(k = "f0_0"), Q(k = "f1_0") | Q(k = "f1_1"), Q(k = "f2_0") | Q(k = "f2_1") | Q(k = "f2_2"))
其中'k'对所有人保持相同,输入可以在指定的组合中具有任意数量的元素。
我试图使用& amp;和|运算符在Q()上,并尝试使用reduce函数构建过滤器。但我总是错误地将“ValueError:太多的值解包”
感谢任何帮助。
答案 0 :(得分:0)
我不确定为什么链接'|'和'&'运算符与Q()无法正常工作。但不知怎的,通过调用字符串上的eval来实现这一点(看起来有点像解决方案)
fMap = {}
for opt in f:
prefix = opt.split('_')[0]
if not prefix in fMap:
fMap[prefix] = 'Q(k="' + opt +'")'
else:
fMap[prefix] += '|Q(k="' + opt +'")'
model.objects.filter(*eval('[' + ','.join([v for k, v in fMap.iteritems()]) + ']'))