サーバーがシリアル化されたデータをオンに戻して要求always_return_data
するように設定できることはよく知っています。しかし、すべての呼び出しではなく、特定の呼び出しで返されるデータを具体的に要求できる方法はありますか?True
POST
PUT
POST
POST/PUT
3 に答える
2
またはメソッドのいずれかでバンドルからすべてのデータを設定always_return_data
しTrue
て手動で削除することもできますが、空の JSON (または任意のシリアル化) オブジェクトが返されるだけであり、これは正確には空の応答ではありません。dehydrate
alter_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 に答える