7

ここで例を使用しようとしています:http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resources

何らかの理由で私は得る:

cached_obj_get()は正確に2つの引数を取ります(1つ指定)

私は明らかに2つの引数でそれを呼び出していますが(前述の例のように。これは私のコードです:

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)
4

1 に答える 1

14

混乱して申し訳ありません-承認を改善するためにAPIが変更され、署名がcached_obj_get次のように変更されました。

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

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

この変更は今後も一貫しており、requestオブジェクトが必要な場合は、として利用できますbundle.requestが、明らかにドキュメントを更新する必要があります。

次のコマンドでバンドルオブジェクトを作成できます。

basic_bundle = self.build_bundle(request=request)

次に、それを引数として使用します(例としてソースコードcached_obj_getを参照):Resource.get_detail

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

Pythonのオブジェクトモデルに精通していない場合のもう1つの紛らわしい点は、最初の位置引数は常にオブジェクトインスタンスselfであるため、メソッドは常に少なくとも1つの引数を受け取るか、キーワード引数はそのカウントに含まれないため、「1指定」はメソッドは、self期待していたときにのみ位置引数selfを受け取りましたbundle

于 2013-03-01T14:05:03.750 に答える