django-tastypie可以在单个资源的列表和详细视图中显示不同的字段集吗?

时间:2012-05-21 22:14:23

标签: python django tastypie

我希望特定django-tastypie模型资源在列出对象时只有一个字段子集,在显示详细信息时只显示所有字段。这可能吗?

4 个答案:

答案 0 :(得分:20)

您现在还可以使用字段上的use_in属性来指定显示字段的相关资源。这可以是listdetail,也可以是回调。< / p>

答案 1 :(得分:14)

您必须指定实际ModelResource中的所有字段,然后覆盖get_list方法以仅过滤掉您想要显示的字段。请参阅get_listResource的内部实施,了解如何覆盖它。

但是,请注意,这仅适用于GET请求,如果授权限制允许,您仍然可以使用所有字段对资源进行POST / PUT / PATCH。

在坚果shell中,您希望在obj_get_list返回的所有ORM对象上调用full_dehydrate之前对内部字段列表进行热修补。

或者,您可以让完整的脱水机制发生,如果您不关心挤出尽可能多的速度,只需在它结束时删除您不想显示的字段。当然,只有在get_list调用的结果调用URL时才需要这样做。这个alter_list_data_to_serialize(request, to_be_serialized)有一种方便的方法。

只是做:

class SomeResource(Resource):
    class Meta(...):
         ...
         field_list_to_remove = [ 'field1', 'field2' ]
         ...

    def alter_list_data_to_serialize(request, to_be_serialized):
        for obj in to_be_serialized['objects']:
            for field_name in self._meta.field_list_to_remove:
                del obj.data[field_name]
        return to_be_serialized

答案 2 :(得分:0)

GitHub上有一个open issue for this,其中有很多解决方法。

答案 3 :(得分:0)

也可以使用脱水(自我,束)方法。

def dehydrate(self, bundle): del bundle.data['attr-to-del] return bundle