我希望特定的django-tastypie
模型资源在列出对象时只有字段子集,在显示详细信息时具有所有字段。这可能吗?
现在,您还可以对字段使用 use_in
属性来指定要在其中显示该字段的相关资源。这可以是list
或detail
,也可以是回调。
您必须在实际的 ModelResource 中指定所有字段,然后重写 get_list
方法以仅过滤掉要显示的字段。请参阅 get_list
on Resource
的内部实现,了解如何覆盖它。
但是,请注意,这仅适用于 GET 请求,如果您授权限制允许,您仍然应该能够在具有所有字段的资源上进行 POST/PUT/PATCH 操作。
简而言之,您希望在对obj_get_list
返回的所有ORM对象调用full_dehydrate之前对内部字段列表进行热修补。
或者,您可以让完整的脱水机制发生,并在它结束时删除您不想显示的字段,如果您不关心尽可能多地挤出速度。 当然,只有当 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 上有一个未解决的问题,那里提出了许多解决方法。
也可以使用脱水(self,bundle(方法。
def dehydrate(self, bundle):
del bundle.data['attr-to-del]
return bundle