【问题标题】:Django error in objects.filter: too many values to unpackobjects.filter 中的 Django 错误:解包的值太多
【发布时间】:2013-12-14 11:15:23
【问题描述】:

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

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

【问题讨论】:

标签: python django


【解决方案1】:

您可以使用 dict ,然后使用 ** 将字典的所有值解压缩为参数:

_vals = {'marca': 'samsung', 'modelo': 's3'}
productos= Producto.objects.filter(**_vals)

【讨论】:

    【解决方案2】:

    我的代码终于可以工作了!我需要使用 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))
    

    【讨论】:

    • 这个解决方案也帮助了我,但我不明白为什么。 ? 我也需要使用Q obj.,因为有时我的过滤器参数将是几个术语reduced 和and_。但是,当我的过滤器是一个引用特定模型对象的单个术语时,我会收到“解包”错误。我将我的代码从Q('item__topic', topic) 更改为Q(**{'item__topic': topic}),现在它可以工作了。 ?‍♀️
    猜你喜欢
    • 2010-10-29
    • 2018-12-19
    • 1970-01-01
    • 2019-06-07
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多