我开始使用Django,我在我的应用程序中有这个代码:
filtro = "marca:samsung_modelo:s3"
mifiltro = filtro.split('_')
cadena = '0'
for caracteristica in mifiltro:
if not cadena == '0':
cadena += ", "
elif cadena == '0':
cadena = ''
aux = caracteristica.split(':')
cadena += aux[0] + "='" + aux[1] + "'"
然后cadena
是:
marca='samsung',modelo='s3'
我想把这个变量用作这样的过滤器:
productos = Producto.objects.filter(cadena)
但是我收到的错误是“解压缩的值太多了。”
如果我写下我的代码:
productos = Producto.objects.filter(marca='samsung',modelo='s3')
工作正常。我可以使用字符串来过滤对象吗?
答案 0 :(得分:2)
您可以使用dict
,然后使用 ** 将所有dict值解压缩为参数:
_vals = {'marca': 'samsung', 'modelo': 's3'}
productos= Producto.objects.filter(**_vals)
答案 1 :(得分:1)
我的代码终于有效了!我需要使用Q对象,所以我修改了这样的代码:
filtro = "marca:1|2"
aux = filtro.split(':')
mismarcas = aux[1].split('|')
mimarca = []
for marca in mismarcas:
mimarca += [Q(**{ aux[0]: marca})]
productos = Producto.objects.filter(reduce(operator.or_, mimarca))