Django tastypie在get中返回空资源\ u uri
这就是资源Django tastypie在get中返回空资源\ u uri,django,tastypie,Django,Tastypie,这就是资源 class TagResource(ModelResource): user = tastypie.fields.ForeignKey(UserResource,'user') class Meta: queryset = Tag.objects.all() resource_name = 'tag' authorization= Authorization() object_class = Tag
class TagResource(ModelResource):
user = tastypie.fields.ForeignKey(UserResource,'user')
class Meta:
queryset = Tag.objects.all()
resource_name = 'tag'
authorization= Authorization()
object_class = Tag
filtering = {
'name' : ALL,
}
简单获取请求
http://localhost:8000/api/v1/tag/1/?format=json
返回空的资源\u uri
{"created": "2014-03-26T15:14:11.928068",
"id": 1, "name": "test",
"resource_uri": "", "user": ""}
为什么呢
我试过了
def hydrate_resource_uri(self, bundle):
return bundle.get_resource_uri()
它不起作用,我很确定它不需要特别护理
我错过了什么 尝试删除object\u类,我认为如果这是ModelResource,您不需要它。我也遇到了同样的问题,那是因为我忘了在url.py中注册资源。 确保在URL.py文件中有类似的内容:
myapi.register(TagResource())
这可能是因为,出于某种原因,api_名称丢失。 尝试将其添加到资源元中。 例如,如果资源uri为/api/v1/YourResourceName,请尝试添加资源元:
api_name = 'v1'
希望它能有所帮助。我知道这很旧,但我知道你的问题,我的问题就在我的问题上,你在API URL include上或在URL树中的任何URL include上都有一个“名称空间”。只有当其他人在URL.py中发现名称空间导致了这个问题时。您必须使用NamespacedModelResource而不是ModelResource:
from tastypie.resources import NamespacedModelResource
class TagResource(NamespacedModelResource):
user = tastypie.fields.ForeignKey(UserResource,'user')
class Meta:
queryset = Tag.objects.all()
resource_name = 'tag'
authorization= Authorization()
object_class = Tag
filtering = {
'name' : ALL,
}
然后输入模块的URL.py
from tastypie.api import NamespacedApi
v1_api = NamespacedApi(api_name='v1', urlconf_namespace='your_module')
v1_api.register(TagResource())
urlpatterns = patterns(
'',
url(r'^api/', include(v1_api.urls)),
)
查看帖子。我已经创建了一个博客来强调同样的问题。链接到 Tastypie提供了两个选项来创建模型资源
Api.py
from tastypie.resources import NamespacedModelResource
class EntityResource(NamespacedModelResource):
class Meta:
queryset = Entity.objects.all()
allowed_methods = ['get']
resource_name = 'entity'
authentication = SessionAuthentication()
authorization = Authorization()
from tastypie.api import NamespacedApi
from mymodule.api import EntityResource
v1_api = NamespacedApi(api_name='v1', urlconf_namespace='mymodule')
v1_api.register(EntityResource())
urlpatterns = patterns('',
url(r'^api/', include(v1_api.urls)),
)
mymodule/url.py
from tastypie.resources import NamespacedModelResource
class EntityResource(NamespacedModelResource):
class Meta:
queryset = Entity.objects.all()
allowed_methods = ['get']
resource_name = 'entity'
authentication = SessionAuthentication()
authorization = Authorization()
from tastypie.api import NamespacedApi
from mymodule.api import EntityResource
v1_api = NamespacedApi(api_name='v1', urlconf_namespace='mymodule')
v1_api.register(EntityResource())
urlpatterns = patterns('',
url(r'^api/', include(v1_api.urls)),
)
确保对模块及其api URL使用相同的命名空间。上面的代码肯定会生成正确的资源uri。我仍然会在响应中得到一个空的
资源uri
。我所有的资源都已经在url.py中注册了,感谢您的延迟响应,但我已经切换到Rest framework.tnx。。我也有同样的问题,那是因为namespace@haki这是正确的答案,所以如果你想接受它,那就太好了:)这是对的。请参阅另一个答案,以获得更彻底的处理。这是一个写得很好、非常准确的答案。谢谢你抽出时间!