0

我有以下资源:

class SpecResource(ModelResource):
    results = fields.ToManyField('(...).ResultResource', 'result_set', full=True)
    (...)

class ResultResource(ModelResource):
    number = fields.IntegerField()
    spec = fields.ForeignKey('(...).SpecResource', 'spec')
    (...)

因此,当我查看规范 JSON 时,它包含一个包含该规范的 ForeignKey 的结果列表。现在,我想过滤查看规范 JSON 时显示的结果,并且我希望能够通过 URL 过滤,就像您通过字段过滤规范列表一样眼镜。那可能吗?

为了进一步说明,我想转到“/api/spec/1/?number=5”并获得与转到“/api/spec/1/”时相同的 JSON ,除了结果字段仅包含数字 = 5 的结果。

这可能在美味派的框架内吗?

4

1 回答 1

2

自从您在此处发布以来已经有一段时间了,但是您可能会在@kroolik 在类似情况下给我的答案中找到一个解决方案,以在“嵌套” ToManyField 相关资源上构建过滤器:https ://stackoverflow.com /a/20035610/1387495

这是主要思想:

您可以使用完整的函数扩展您传递给结果字段的属性参数并重用ResultResourceres.obj_get_list处理根据您的ResultResource定义的构建和应用过滤器。您只需要在parent_id上进一步过滤它。

在代码中:

class SpecResource(ModelResource):
    results = fields.ToManyField('(...).ResultResource', attribute=lambda bundle: filter_result_items(bundle), full=True)

def filter_result_items(bundle):
    res = ResultResource()
    new_bundle = Bundle(request=bundle.request)
    objs = res.obj_get_list(new_bundle)
    return objs.filter(parent_id=bundle.obj.pk)

再次感谢@kroolik,他向我展示了这个技巧。

于 2013-11-18T00:06:35.050 回答