1

サーバーがシリアル化されたデータをオンに戻して要求always_return_dataするように設定できることはよく知っています。しかし、すべての呼び出しではなく、特定の呼び出しで返されるデータを具体的に要求できる方法はありますか?TruePOSTPUTPOSTPOST/PUT

4

3 に答える 3

2

またはメソッドのいずれかでバンドルからすべてのデータを設定always_return_dataTrueて手動で削除することもできますが、空の JSON (または任意のシリアル化) オブジェクトが返されるだけであり、これは正確には空の応答ではありません。dehydratealter_detail_data_to_serialize

必要な動作へのおそらく最も明示的な方法は、関数と関数をオーバーライド<method>_list<method>_detail、必要に応じてデータを返すかどうかの決定を実装することです。

以下は、決定するために名前がpost_list付けられた GET パラメータを取る例です。return_data

def post_list(self, request, **kwargs):
    deserialized = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json'))
    deserialized = self.alter_deserialized_detail_data(request, deserialized)
    bundle = self.build_bundle(data=dict_strip_unicode_keys(deserialized), request=request)
    updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))
    location = self.get_resource_uri(updated_bundle)

    return_data = updated_bundle.request.GET.get('return_data', None)

    if not return_data is None:
        updated_bundle = self.full_dehydrate(updated_bundle)
        updated_bundle = self.alter_detail_data_to_serialize(request, updated_bundle)
        return self.create_response(request, updated_bundle, response_class=http.HttpCreated, location=location)
    else:    
        return http.HttpCreated(location=location)
于 2013-02-26T17:18:41.920 に答える
1

私の意見では、最善の方法は、dehydrate メソッドをオーバーライドして、always_return_data=True を設定することです。

class SomeModelResource(ModelResource):
   class Meta:
      queryset = SomeModel.objects.all()
      always_return_data=True

   def dehydrate(self, bundle):
      if  request.META['REQUEST_METHOD'] == 'POST' and\
                  request.POST.get('param', None)=='PARAM':
           bundle.data = dict(id=bundle.obj.pk,
                               name=bundle.obj.name)
      return bundle
于 2013-02-26T23:22:11.387 に答える
1

データを返す投稿に追加のパラメーターを追加することをお勧めします。パラメータがポスト変数に存在する場合は、必要なデータをバンドルに追加します。

于 2013-02-26T14:50:20.207 に答える