2013-03-22 1 views
1

У меня есть бэкэнд Django, который использует Tastypie для создания своего RESTful API. Конечная точка этого API не находится на верхнем уровне домена; скорее, он существует в местоположении «подпапки» с использованием WSGIScriptAlias. В большинстве случаев это прекрасно работает. Но я обнаружил, что когда один из моих ресурсов имеет отношение ToManyField, Tastypie выдает ошибку. Вот некоторые из моих соответствующих кода. WSGIScriptAlias ​​линия:Django Tastypie ToManyField не разрешает соответствующие URI

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 ... 

(он продолжается оттуда чтобы просмотреть все URL-адреса, которые он пробовал, и не удалось найти соответствие).

Так что, если я правильно понимаю, происходит то, что из-за моего WSGIScriptAlias ​​связанные объекты сообщают о своем полном пути в качестве URI ресурса, но затем, когда tastypie отправляется, чтобы вернуть связанные объекты обратно с той, которую я «Они вызваны, они не соответствуют чему-либо в urls.py (потому что ему нужны только шаблоны url относительно точки подключения приложения WSGI). Я проверил это, временно изменив WSGIScriptAlias, поэтому API находится в корне, а затем все работает нормально. Итак, что мне нужно сделать, чтобы сохранить его с шаблоном URL подпапки? Я немного поиграл с переопределением prepend_urls и get_resource_uri, но я действительно не понимаю, как эти функции используются в классе ресурсов, и поэтому я не уверен, что для меня это правильная стратегия. Заранее спасибо.

+0

Такая же проблема здесь ... –

ответ

0

Какую версию tasyypie вы используете?

У меня была такая же проблема, кажется, решена путем обновления с 0.9.12 до 0.9.15.

 Смежные вопросы

  • Нет связанных вопросов^_^