我希望一个特定的django-tastypie
模型资源在列出对象时只有一个字段子集,在显示详细信息时有所有字段。这可能吗?
4 回答
您现在还可以使用use_in
字段上的属性来指定要在其中显示该字段的相关资源。这可以是list
或detail
,或回调。
您必须指定实际 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
在 GitHub 上有一个未解决的问题,其中建议了许多解决方法。
也可以使用 dehydrate(self, bundle) 方法。
def dehydrate(self, bundle):
del bundle.data['attr-to-del]
return bundle