【问题标题】:ValueError: too many values to unpack, passing a list as *argsValueError:解包的值太多,将列表作为 *args 传递
【发布时间】:2015-09-13 05:49:26
【问题描述】:

我在将参数通过列表传递给 Django 过滤器时遇到问题。这是我的代码:

args = [ "Q( title__icontains = 'Foo' ) | Q( author__icontains = 'Foo' )", "Q( title__icontains = 'Bar' ) | Q( author__icontains = 'Bar' )" ]
entries = Book.objects.filter( *args )

filter 返回此错误:

ValueError:解包的值太多,

【问题讨论】:

  • foo 和 bar 查询有什么关系?它们应该被 AND-ed 或 OR-ed 在一起吗?
  • 这里是谓词的关系:(title__icontains = 'foo' OR author__icontains = 'Foo') AND (title__icontains = 'bar' OR author__icontains = 'bar')

标签: python django-filter


【解决方案1】:

删除所有 " 就对了。

args = [ Q( title__icontains = 'Foo' ) | Q( author__icontains = 'Foo' ), Q( title__icontains = 'Bar' ) | Q( author__icontains = 'Bar' )]
entries = Book.objects.filter( *args )

【讨论】:

    【解决方案2】:

    您的 args 是字符串,但它们必须是 Q 对象。删除 Q 对象定义周围的引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2016-05-11
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多