11

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

4

4 回答 4

22

您现在还可以使用use_in字段上的属性来指定要在其中显示该字段的相关资源。这可以是listdetail,或回调。

于 2013-04-16T10:38:14.877 回答
14

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

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

简而言之,您希望在调用 full_dehydrate 返回的所有 ORM 对象之前热修补内部字段列表obj_get_list

或者,您可以让完整的脱水机制发生,并在它结束时删除您不想显示的字段,如果您不关心尽可能快地挤出。当然,只有当 URL 作为 get_list 调用的结果而被调用时,您才需要这样做。有一个方便的方法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
于 2012-05-22T12:57:12.570 回答
0

在 GitHub 上有一个未解决的问题,其中建议了许多解决方法。

于 2013-01-29T04:00:04.420 回答
0

也可以使用 dehydrate(self, bundle) 方法。

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

于 2014-06-05T11:08:03.980 回答