如何根据Tastypie中孩子的孩子场进行过滤?

时间:2014-02-10 23:01:47

标签: django tastypie

我有一个类似的模型:

Shop
    Categories
         Items

我可以按照以下方式过滤商店的类别:

categories = fields.ToManyField('api.CategoryResource', attribute=lambda bundle: Category.objects.filter(parent__isnull=True), full= True)

假设我想在查询商店时过滤已发布的商品。

我该如何过滤?我应该在哪里写查询?

    items = fields.ToManyField(ItemResource, attribute=lambda bundle: Item.objects.filter(category=bundle.obj, published=True),related_name='items', full=True)

这段代码给了我错误:

{"error": "The model '<Category: category1>' has an empty attribute '<function <lambda> at 0x10ba506e0>' and doesn't allow a null value."}

1 个答案:

答案 0 :(得分:0)

当lambda函数返回的列表为空时,会发生此错误。 因此,添加null = True将解决此问题。

所以你最终得到了这个:

    items = fields.ToManyField(ItemResource, attribute=lambda bundle: Item.objects.filter(category=bundle.obj, published=True),related_name='items', full=True, null=True)