2013-02-26 7 views
1

Мне знакомо, что я могу установить always_return_data в True, чтобы сервер возвращал сериализованные данные обратно на POST и PUT. Но есть ли способ, который я могу запросить, чтобы данные были возвращены на конкретный вызов POST, а не все звонки POST/PUT?Как я могу явным образом запросить данные по POST

ответ

1

Я бы предложил добавить дополнительный параметр в сообщение, по которому вы хотите вернуть данные. Если параметр существует в почтовом переменных добавить необходимые данные в пачку в дигидрате

2

Вы можете установить always_return_data в True и вручную удалить все данные из пучка либо в или методе dehydratealter_detail_data_to_serialize но это только приведет к пустой объект JSON (или любой другой сериализатор, который вы предпочитаете), который не является пустым ответом.

Возможно, наиболее явным способом для желаемого поведения было бы переопределить функции <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) 
1

По моему мнению, лучший способ, чтобы переопределить метод обезвоживают и установить 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 
Смежные вопросы