objects.filter中的Django错误:解压缩的值太多

时间:2013-11-28 12:05:45

标签: python django

我开始使用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')

工作正常。我可以使用字符串来过滤对象吗?

2 个答案:

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