Django Tastypie ToManyField没有正确解析相关的URI

时间:2013-03-22 22:34:03

标签: django tastypie

我有一个使用Tastypie生成RESTful API的Django后端。此API的端点不位于域的顶层;相反,它通过使用WSGIScriptAlias存在于“子文件夹”位置。大多数时候,这很好用。但是我发现当我的一个资源有ToManyField关系时,Tastypie会抛出一个错误。这是我的一些相关代码。 WSGIScriptAlias行:

WSGIScriptAlias /english/rubric /var/webapps/django/rubric/apache/django.wsgi

有问题的资源的片段:

class TraitResource(ModelResource):
    criteria = fields.ToManyField('rubric.rubric.api.CriterionResource', "criteria", related_name='trait', full = True)

    class Meta:
         queryset = Trait.objects.all()
         authentication=SessionAuthentication()
         list_allowed_methods=['get']
    always_return_data=True

class CriterionResource(ModelResource):

    class Meta:
        queryset = Criterion.objects.all()
        authentication=SessionAuthentication()
        list_allowed_methods=['get']
    always_return_data=True

我的urls.py:

v1_api = Api(api_name='v1')
v1_api.register(TraitResource())
v1_api.register(CriterionResource())

urlpatterns = patterns('',  
    (r'^login/$', 'django_cas.views.login'),
    (r'^logout/$', 'django_cas.views.logout'),
    (r'^api/', include(v1_api.urls))
)

错误消息中的片段:

{
error_message: "{'path': u'english/rubric/api/v1/rubric', 'tried': [[<RegexURLPattern None ^login/$>], [<RegexURLPattern None ^logout/$>], [<RegexURLResolver [<RegexURLPattern api_v1_top_level ^(?P<api_name>v1)/?$>, <RegexURLResolver [<RegexURLPattern api_dispatch_list ...

(它从那里开始列出它尝试过的所有网址,但未能找到匹配项。)

因此,如果我理解正确的话,发生的事情是,由于我的WSGIScriptAlias,相关对象报告了他们的完整路径作为资源URI,但是当tastypie去获取相关对象时返回的那个我'我们调用它们,它们在urls.py中没有匹配任何东西(因为它只需要相对于WSGI app挂载点的url模式)。我已经通过临时修改WSGIScriptAlias验证了这种情况,因此API位于根目录 - 然后一切正常。那么我需要做些什么来保持子文件夹URL模式?我在覆盖prepend_urls和get_resource_uri方面都玩过一些,但我并没有真正了解这些函数在资源类中的使用方式,因此我不确定这对我来说是否是正确的策略。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你使用的是什么版本的tasyypie?

我遇到了同样的问题,似乎是通过从0.9.12升级到0.9.15来解决的。