我目前正在使用带有2个应用的tastypie。每个应用程序都有一个名为Group的模型。它们的运作方式截然不同,唯一的相似之处是“集团”这个名称。
当只有一个或另一个应用程序添加到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 repo中当前api.py文件的第37行,我看到这段代码:
if resource_name is None:
raise ImproperlyConfigured("Resource %r must define a 'resource_name'." % resource)
self._registry[resource_name] = resource
由于我的两个Group资源都具有'group'的resource_name,因此它们会相互注册,即使它们是在不同的URL上注册的。除了更改实际的资源名称外,是否还有解决此名称冲突的方法?
更新 uris看起来像这样:
/myapp1/1.0/group/
/myapp2/1.0/group/
理想情况下,我不希望myapp1和myapp2彼此了解(即Group类是不同的)。解决方法是将myapp2.Group更改为myapp2.MyGroup(以避免名称冲突),但它真的不那么优雅。
答案 0 :(得分:0)
在我的所有资源中,我将resource_name留空,因为我对默认名称感到满意。我也想要一个网址,如/myapp/1.0/group/而不是/myapp/1.0/myapp/group/
我现在所做的是将所有resource_name属性更改为“myapp / group”形式,并将它们全部绑定到空URL。这给了我一个很好的例如:/1.0/myapp/group/,同时确保资源中没有名称冲突。