2016-09-02 3 views
0

Я пытаюсь переопределить tastypie create_response, потому что у меня есть некоторая проверка, прежде чем отправлять ответ пользователю. это мой код:tastypie overid create_response() method

class MyNamespacedModelResource(NamespacedModelResource): 
    def create_response(self , request , data): 
     r = super(MyNamespacedModelResource , self).create_response(request , data , response_class=HttpResponse) 
      # ... some treatements... 
     return r 

И у меня есть пространство имен пользователейModelResource, которые работают до этого.

Когда я Тринг, чтобы добавить новый пользователь (с методом POST), я получил эту

error: 

create_response() got an unexpected keyword argument 'response_class' 

ответ

0

Вы определили метод create response() с двумя позиционными аргументами. Тем не менее, определение супер класс выглядит следующим образом:

def create_response(self, request, data, response_class=HttpResponse, **response_kwargs) 

Почему это проблема в том, что ваш переопределяется метод вызывается с аргументами ключевых слов, которые вы не «приняты» в вашем определении. Вот что стоит **response_kwargs. Это означает, что эта функция может иметь бесконечное количество ключевых слов. У вашего определения может быть 0. Поэтому, если вы измените свое определение на create_response(self, request, data, **kwargs) или create_response(self, request, data, response_class=HttpResponse, **response_kwargs), вы избавитесь от этой проблемы. Но у тебя будет еще один на руках. В 99% случаев аргументы ключевого слова должны быть переданы методу суперкласса. Таким образом, идеальный вариант в большинстве случаев просто дублирует как определение и super() вызова метода, который в вашем случае выглядит следующим образом:

class MyNamespacedModelResource(NamespacedModelResource): 
    def create_response(self, request, data, response_class=HttpResponse, **response_kwargs): 
     r = super(MyNamespacedModelResource , self).create_response(request, data, response_class=response_class, **response_kwargs) 

     return r 
+0

Он работает отлично. благодаря –