2012-03-07 8 views
1

私は現在2つのアプリでtastypieを使用しています。これらのアプリのそれぞれには、Groupというモデルがあります。それらは非常に異なって動作し、唯一の類似点は「グループ」という名前です。Tastypieリソース名の衝突

1つまたは他のアプリだけがurlsファイルに追加されると、それは魅力のように機能します。しかし、両方のアプリケーションを追加するとすぐに名前の衝突が発生し、get_resource_uri()メソッドが間違った文字列を返します。私はこのコードを参照してくださいtastypieレポで現在api.pyファイルの行37に

urls.py

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 

ここではいくつかのコードがあります私のグループリソースはresource_nameの 'group'を持ち、別々のURLに登録されているにもかかわらず、互いの上に登録されます。実際のリソース名を変更するだけでなく、この名前の衝突を回避する方法はありますか?

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

理想的には私がmyapp1とmyapp2(すなわちグループクラスは別個のものである)お互いを知ってほしくない:

更新 URIは次のようになります。これの回避策はmyapp2.Groupをmyapp2.MyGroup(名前の衝突を避けるため)に変更することですが、実際にはそれほどエレガントではありません。

+0

リソースメタ名に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/のような素晴らしいものを与えました。