有没有一种方法可以使用resource_name
在tastypie中创建一个类似于常规django-url的资源层次结构?我的目标是拥有如下的tastypie网址:<app_name>/<module_name>/<functionality>
,但我遇到了麻烦。
我使用以下resource_name
:创建了资源
图书馆/书籍
图书馆/书籍/货架
图书/流通
(注意父资源library/book
没有尾部斜线)
在这种情况下,我可以很好地访问父资源。但是,当尝试访问其中一个子资源(例如/api/v1/library/books/circulation
)时,我收到以下错误:
提供的资源查找数据无效(类型不匹配)。
另一方面,当我将父级的resource_name
定义为library/books/
(带有尾部斜杠)时,子级资源返回良好,但父级资源本身返回404错误。
如果我用下划线(library_books
,library_books_circulation
)格式化resource_name
,一切都很好,但它们真的很难看。。。
我正在运行Python 2.7.3,使用Django 1.6和Tastypie 0.10.0。
虽然我不确定使用带斜杠的resource_name的方法是否总是适用于您,但为了解决您的问题,您可以简单地更改URL注册的顺序。
注册url时,最后注册名称为"library/books"的资源。你有这个问题的原因是"图书馆/书籍/书架"被认为是带有"书架"pk的书。如果资源"library/books/shelf"的url模式将首先出现,那么Django将在尝试解析library/bbooks/pk之前捕获这些模式。