5

Tastypie-メーリングリストを読んだ人がいる場合: 回答が得られなかったので、ここでクロスポストして申し訳ありません。

Tastypie では、PK とは別のキーを使用するため、Resource の URL パターンを変更しました。リソースにアクセスすると、これは正常に機能します。このリソースを親リソースにネストしたいのですが、ネストされたリソースには、カスタム キーではなく、PK を持つ URI が含まれています。私が学んだことは、私の場合、子の get_resource_uri を変更する必要があるということです。

私の子供のリソース (NamespacedResource である) のメソッドは次のようになります。

def get_resource_uri(self, bundle_or_obj):

    obj = bundle_or_obj.obj if isinstance(bundle_or_obj, Bundle) else bundle_or_obj

    kwargs={
        'resource_name': self._meta.resource_name,
        'custom_id': obj.custom_id
        }

    return self._build_reverse_url('api_dispatch_detail', kwargs=kwargs)

子の URL オーバーライド メソッドは次のとおりです。

def override_urls(self):
    return [
        url(r"^(?P<resource_name>%s)/(?P<custom_id>[-_\w\d]+)%s$" % (
                self._meta.resource_name,
                trailing_slash()
            ),
            self.wrap_view('dispatch_detail'),
            name="api_dispatch_detail"
        ),
    ]

ただし、アプリケーションは URL を逆にすることはできません。次のエラーが表示されます。

Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'custom_id': u'3_ee5-4423', 'resource_name': 'myresource'} not found.

URL を正しく反転するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

2

Tastypie の内部 URL には常に kwargs が必要resource_nameですapi_name

kwargs には以下が含まれている必要があります。

kwargs = {
    'api_name': 'v1',  # Or whatever you have set for your api
    'resource_name': self._meta.resource_name,
    'custom_id': obj.custom_id
}
于 2012-09-07T08:34:08.823 に答える