Tastypie nested resources – cached_obj_get () leva exatamente 2 argumentos (1 dado)

Estou tentando usar o exemplo aqui: http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resources

por algum motivo eu recebo:

cached_obj_get () recebe exatamente 2 argumentos (1 dado)

apesar de eu claramente chamá-lo com 2 argumentos (exatamente como no exemplo acima mencionado, este é o meu código:

def prepend_urls(self): return [ url(r"^(?P%s)/(?P\w[\w/-]*)/feed%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_feed'), name="api_get_feed"), ] def get_feed(self, request, **kwargs): try: obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs)) except ObjectDoesNotExist: return HttpGone() except MultipleObjectsReturned: return HttpMultipleChoices("More than one resource is found at this URI.") feed_resource = FeedItemResource() return feed_resource.get_list(request, p_id=obj.id) 

Desculpe pela confusão – houve uma alteração na API para melhorar a autorização, que alterou a assinatura de cached_obj_get de:

 def cached_obj_get(self, request=None, **kwargs): 

para

 def cached_obj_get(self, bundle, **kwargs): 

Esta mudança é consistente daqui para frente – e se você precisava do object request , ele está disponível como bundle.request – mas obviamente a documentação precisa ser atualizada.

Você pode criar um object de pacote com:

 basic_bundle = self.build_bundle(request=request) 

em seguida, use-o como um argumento para cached_obj_get (consulte o código-fonte Resource.get_detail como exemplo):

 obj = self.cached_obj_get(bundle=basic_bundle, **self.remove_api_resource_names(kwargs)) 

O outro aspecto confuso se você não está familiarizado com o modelo de object do Python é que os methods sempre recebem pelo menos um argumento porque o primeiro argumento posicional é sempre a instância do object ou os argumentos self e keyword não são incluídos nessa contagem, então “1 given” significa que o método recebeu apenas o argumento de self posição quando estava esperando por self e bundle .