私は現在、2つのアプリでtastypieを使用しています。これらの各アプリには、グループと呼ばれるモデルがあります。それらは非常に異なって動作し、唯一の類似点は「グループ」という名前です。
どちらか一方のアプリだけがurlsファイルに追加されると、それは魅力のように機能します。ただし、両方のアプリを追加するとすぐに名前が衝突し、get_resource_uri()メソッドが間違った文字列を返します。ここにいくつかのコードがあります:
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())
tastypieリポジトリの現在のapi.pyファイルの37行目に、次のコードが表示されます。
if resource_name is None:
raise ImproperlyConfigured("Resource %r must define a 'resource_name'." % resource)
self._registry[resource_name] = resource
私のグループリソースは両方とも'group'のresource_nameを持っているので、別々のURLで登録されていても、それらは互いに重なり合って登録されます。実際のリソース名を変更する以外に、この名前の衝突を回避する方法はありますか?
更新 URIは次のようになります。
/myapp1/1.0/group/
/myapp2/1.0/group/
理想的には、myapp1とmyapp2がお互いについて知らないようにします(つまり、Groupクラスは区別されます)。この回避策は、myapp2.Groupをmyapp2.MyGroupに変更することです(名前の衝突を避けるため)が、実際にはそれほどエレガントではありません。