【问题标题】:Use of lambda in filter query in django在 django 的过滤器查询中使用 lambda
【发布时间】:2014-05-01 06:53:04
【问题描述】:

在我的模型中,我有一个列名类别,值的形式为 "x -> y -> z"
x,y,z 都用箭头 (->) 分隔(虽然整个本身就是一个字符串)

我想要的是根据'y'字符串过滤对象

类似

MyModel.objects.filter(category = lambda key: y in key)

但它给了我错误TypeError: <lambda>() takes exactly 1 argument (0 given)

Example: MyModel (3 column, category column is foreign key to another model(which has only one column same name=category))
ID   name   category
1    xyz    world->europe->france
2    abc    animal->fourleg->dog
3    pqr    car->europe->benz

我在下面的查询中应用了这个

MyModel.objects.filter(category = lambda key: 'europe' in key)

我期待两个返回的对象(Id 1 和 3)。

我希望它现在清楚了吗?

我无法弄清楚为什么会发生这种情况。或者还有其他方法可以做同样的事情吗? 我是 django 的新手,所以这可能是毫无意义/无关紧要或愚蠢的问题,但我无法找到解决方案。

Python 2.x

Django 1.4.x

【问题讨论】:

  • 我对你的困惑感到困惑。没有理由认为这会奏效,我不知道你为什么认为它会奏效。这根本不是 Django 查询的工作方式。
  • @DanielRoseman:那你有什么建议?还有其他选择吗?
  • 不清楚您要达到的目标。您能否举一些模型实例、预期查询和预期输出的示例?
  • @desiredlogin :请查看更新后的问题详细信息。我添加了一个示例。

标签: python django python-2.7 lambda django-views


【解决方案1】:

根据您的字符串的结构,您可以使用contains 查找。比如:

# 'name' is whatever your string column on category is called
MyModel.objects.filter(category__name__contains='->{}->'.format(y_string))

有关查找类型的更多详细信息,请参阅the docs

【讨论】:

  • 错误:Related Field has invalid lookup: contains ?
  • @pankaj:您最初说类别是一个字符串。显然它实际上是ForeignKey?这就是为什么你应该总是把你的模型放在问题中。无论如何,我已经更新了匹配的答案。
  • 谢谢 :) 还有一件事 category__name__contains='->{}->'.format(y_string)) 没用,但 category__name__contains='y_string') 效果很好 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2011-09-17
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多