特定のdjango-tastypie
モデル リソースについて、オブジェクトを一覧表示するときはフィールドのサブセットのみを表示し、詳細を表示するときはすべてのフィールドを表示したいと考えています。これは可能ですか?
4 に答える
実際の ModelResource ですべてのフィールドを指定してから、get_list
メソッドをオーバーライドして、表示するフィールドのみを除外する必要があります。get_list
onの内部実装をResource
参照して、それをオーバーライドする方法を確認してください。
ただし、これは GET リクエストにのみ適用されることに注意してください。承認制限で許可されている場合は、すべてのフィールドでリソースに対して POST/PUT/PATCH を実行できるはずです。
簡単に言うと、 によって返されるすべての ORM オブジェクトに対して full_dehydrate が呼び出される前に、内部フィールド リストにホット パッチを適用する必要があります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