2012-09-07 10 views
5

誰かがTastypie-Mailinglistを読んでいれば、私はそこに答えを得られなかったので、ここでクロスポストするのは申し訳ありません。get_resource_uriの逆URLを構築する

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

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を元に戻すことはできません

(NamespacedResourceである)私の子供のリソースのメソッドは次のようになります。このエラーが発生します:

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

URLを正しくリバートするにはどうすればよいですか?

ありがとうございます。

答えて

2

芸術家の内部のURLは常にresource_nameapi_name kwargsを必要とします。

あなたkwargsからは、含まれている必要があります

kwargs = { 
    'api_name': 'v1', # Or whatever you have set for your api 
    'resource_name': self._meta.resource_name, 
    'custom_id': obj.custom_id 
} 
+0

完璧な、ありがとう! – schneck

関連する問題