2013-03-01 4 views
7

Ich versuche, das Beispiel zu verwenden hier: http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resourcesTastypie Verschachtelte Ressourcen - cached_obj_get() nimmt genau 2 Argumente (1 gegeben)

aus irgendeinem Grund, den ich bekommen:

cached_obj_get() nimmt genau . 2 Argumente (1 gegeben)

obwohl ich nenne es klar mit 2 Argumenten (genau wie in dem oben erwähnten Beispiel dies ist mein Code:

def prepend_urls(self): 
    return [ 
     url(r"^(?P<resource_name>%s)/(?P<pk>\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) 

Antwort

14

Sorry für die Verwirrung - es gab eine API change to improve authorization, die die Signatur für cached_obj_get aus geändert:

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

zu

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

Diese Änderung steht im Einklang geht nach vorn - und wenn Sie die request benötigt Objekt, es ist verfügbar als bundle.request - aber offensichtlich muss die Dokumentation aktualisiert werden.

Sie können ein Bündel Objekt mit bauen:

basic_bundle = self.build_bundle(request=request) 

verwenden sie dann als Argument an cached_obj_get (siehe Resource.get_detail source code als Beispiel):

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

Der andere verwirrende Aspekt, wenn Sie Nicht vertraut mit Pythons Objektmodell ist, dass Methoden immer mindestens ein Argument erhalten, weil das erste Positionsargument immer die object instance or self ist und Schlüsselwortargumente nicht in dieser Zählung enthalten sind, also bedeutet "1 gegeben", dass die me thod erhielt nur das Positionsargument self, als es self und bundle erwartete.

+0

Vielen Dank an David R., der erklärt hat, wie man ein Paket erstellt und ein Beispiel hinzufügt! –

+0

Ich stolperte auf diese Antwort bei der Suche nach der gleichen Fehlermeldung für obj_get(). Diese Antwort enthält auch wahr obj_get() –

Verwandte Themen