У меня есть бэкэнд 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, но я действительно не понимаю, как эти функции используются в классе ресурсов, и поэтому я не уверен, что для меня это правильная стратегия. Заранее спасибо.
Такая же проблема здесь ... –