我希望特定django-tastypie
模型资源在列出对象时只有一个字段子集,在显示详细信息时只显示所有字段。这可能吗?
答案 0 :(得分:20)
您现在还可以使用字段上的use_in
属性来指定显示字段的相关资源。这可以是list
或detail
,也可以是回调。< / p>
答案 1 :(得分:14)
您必须指定实际ModelResource中的所有字段,然后覆盖get_list
方法以仅过滤掉您想要显示的字段。请参阅get_list
上Resource
的内部实施,了解如何覆盖它。
但是,请注意,这仅适用于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