Tastypie资源名称冲突

时间:2012-03-07 11:04:20

标签: django tastypie

我目前正在使用带有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(以避免名称冲突),但它真的不那么优雅。

1 个答案:

答案 0 :(得分:0)

在我的所有资源中,我将resource_name留空,因为我对默认名称感到满意。我也想要一个网址,如/myapp/1.0/group/而不是/myapp/1.0/myapp/group/

我现在所做的是将所有resource_name属性更改为“myapp / group”形式,并将它们全部绑定到空URL。这给了我一个很好的例如:/1.0/myapp/group/,同时确保资源中没有名称冲突。