Может ли django-tastypie отображать другой набор полей в списке и подробные представления одного ресурса?

Я хотел бы, чтобы конкретный django-tastypie модели django-tastypie имел только подмножество полей при перечислении объектов и всех полей при отображении детали. Это возможно?

Вам нужно будет указать все поля в фактическом ModelResource, а затем переопределить метод get_list чтобы отфильтровать только те поля, которые вы хотите показать. Посмотрите внутреннюю реализацию get_list в 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 

Вы также можете теперь использовать атрибут use_in в поле, чтобы указать соответствующий ресурс для отображения поля. Это может быть либо list либо detail , либо обратный вызов.

Для GitHub существует открытая проблема , в которой предлагается ряд обходных решений.

Может также использовать метод обезвоживания (сам, пучок).

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