2012-09-07 2 views
5

Tastypie-Mailinglist를 읽는 사람이 있으면 누구나 답변을 얻지 못했습니다. 여기에 교차 게시를 위해 미안합니다.get_resource_uri에 역방향 URL을 작성하십시오.

Tastypie에서 나는 PK보다 다른 키를 사용하기 때문에 Resource의 URL 패턴을 변경했습니다. 이 리소스에 액세스 할 때 잘 작동합니다. 이제이 리소스를 상위 리소스에 중첩하려고하지만 내포 된 리소스에 내 사용자 지정 키가 아닌 PK가 포함 된 URI가 포함되어 있습니다. 내가 배운 것은 내 경우에 자식의 get_resource_uri를 변경해야한다는 것이다.

(A NamespacedResource입니다) 자녀의 자원의 방법은 다음과 같습니다

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을 취소 할 수 없습니다 :

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 재정의 방법이있다. 이 오류가 발생합니다 :

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

어떻게하면 URL을 바꿀 수 있습니까?

미리 감사드립니다.

답변

2

tastypie의 내부 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

관련 문제