11

特定のdjango-tastypieモデル リソースについて、オブジェクトを一覧表示するときはフィールドのサブセットのみを表示し、詳細を表示するときはすべてのフィールドを表示したいと考えています。これは可能ですか?

4

4 に答える 4

14

実際の ModelResource ですべてのフィールドを指定してから、get_listメソッドをオーバーライドして、表示するフィールドのみを除外する必要があります。get_listonの内部実装を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
于 2012-05-22T12:57:12.570 に答える
0

GitHubには未解決の問題があり、いくつかの回避策が提案されています

于 2013-01-29T04:00:04.420 に答える
0

dehydrate(self, bundle) メソッドも使用できます。

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

于 2014-06-05T11:08:03.980 に答える