2012-03-07 4 views
1

현재 2 개의 앱으로 tastypie를 사용하고 있습니다. 각 앱에는 그룹이라는 모델이 있습니다. 그들은 매우 다르게 운영되며 유일한 유사성은 '그룹'이라는 이름입니다.Tastypie 리소스 이름 충돌

하나 또는 다른 앱만 URL 파일에 추가되면 매력처럼 작동합니다. 그러나 두 앱을 모두 추가하자마자 이름 충돌이 발생하고 get_resource_uri() 메소드가 잘못된 문자열을 반환합니다. 여기에 몇 가지 코드 :

urls.py

이 코드 참조 tastypie의 repo에서 현재 api.py 파일의 라인 (37)에
from myapp1.resources import GroupResource as gr_a 
from myapp2.resources import GroupResource as gr_b 

myapp1_api = Api(api_name='1.0') 
myapp1_api.register(gr_a()) 

myapp2_api = Api(api_name='1.0') 
myapp2_api.register(gr_b()) 

: 모두 때문에

if resource_name is None: 
    raise ImproperlyConfigured("Resource %r must define a 'resource_name'." % resource) 

self._registry[resource_name] = resource 

을 내 그룹 리소스는 group_name의 resource_name을 가지며 별도의 URL에 등록되어 있어도 서로 위에 겹쳐서 등록됩니다. 실제 리소스 이름을 변경하는 것 외에도이 이름 충돌을 피할 수있는 방법이 있습니까?

업데이트 URI를 이런 모양 일 :

/myapp1/1.0/group/ 
/myapp2/1.0/group/ 

가 이상적으로는 myapp1 및 myapp2가 서로에 대해 알고 싶지 않아 (즉, 그룹 클래스는 구별된다). 이 문제를 해결하려면 myapp2.Group을 myapp2.MyGroup (이름 충돌을 방지하기 위해)으로 변경하는 것이지만 실제로는 그렇게 우아하지 않습니다.

+0

리소스 meta_name에 resource_name을 설정하고 있습니까? 그렇지 않으면 클래스 이름이 기본값이됩니다. http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources – JamesO

+0

저는 아닙니다. 내가 할 수있을 것 같아요하지만 URL이 변경되지 않은 경우 선호하기 때문에 클래스 이름과 같은 리소스 이름을 원합니다. 불행하게도 Meta에서 리소스 이름을 변경하면 해당 클래스의 api url에도 영향을줍니다. – Gevious

+1

둘 다에 대한 리소스 URI는 무엇입니까? 나는. 어떤 URL에 액세스합니까? – kgr

답변

0

내 모든 리소스에서 기본 이름이 만족 스럽기 때문에 resource_name을 비워 두었습니다. 또한 /myapp/1.0/group/ 및 /myapp/1.0/myapp/group/이 아닌 URL을 원했습니다.

이제 모든 resource_name 속성을 "myapp/group"형식으로 변경하고 그들 모두를 빈 url에 묶었습니다. 이것은 나에게 멋진 것을주었습니다 : /1.0/myapp/group/ 자원에 이름 충돌이 없는지 확인하십시오.