在django中使用lambda进行过滤查询

时间:2014-05-01 06:53:05

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

在我的模型中,我有一个列名类别,值的形式为 “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

1 个答案:

答案 0 :(得分:2)

根据字符串的结构,您可以使用contains查找。类似的东西:

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

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