Tastypie NotFound: предоставлены недопустимые данные поиска ресурсов (несоответствующий тип)

Право, мне трудно понять это,

В моей локальной среде я интегрировал поиск имени пользователя для объекта пользователя django:

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        excludes = ['password', 'email', 'is_staff', 'is_active', 'is_superuser']
        resource_name = 'users'
        include_resource_uri = False
        filtering = {
            'username': ALL
        }

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/(?P<username>[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
        ]

В источнике deliciouspie, resources.py, я добавил два оператора печати в строке 1800+.

def obj_get(self, request=None, **kwargs):
    """
    A ORM-specific implementation of ``obj_get``.

    Takes optional ``kwargs``, which are used to narrow the query to find
    the instance.
    """
    try:
        print "1, ", kwargs
        base_object_list = self.get_object_list(request).filter(**kwargs)
        print "2, ", base_object_list
        # etcetera

Посещение:

/api/v1/users/foo/?format=json

это печатает:

1,  {'username': foo'}
2,  [<User: foo>]
1,  {'id': 1}
2,  [<User: foo>]

И возвращает правильный объект JSON.

Однако на моем удаленном (dev) сервере у меня точно такая же настройка (я дважды проверил все файлы), единственная разница кажется в том, что на нем запущено яйцо deliciouspie python 2.7 вместо 2.6, в любом случае я получаю этот принт:

1,  {'pk': u'foo'}
[27/Jul/2012 10:48:37] "GET /api/v1/users/foo/?format=json HTTP/1.0" 404 1219

Я также получаю эту трассировку стека:

{
error_message: "Invalid resource lookup data provided (mismatched type).",
traceback: "Traceback (most recent call last):

  File "...path.../resources.py", line 192, in wrapper
    response = callback(request, *args, **kwargs)

  File "...path.../resources.py", line 406, in dispatch_detail
    return self.dispatch('detail', request, **kwargs)

  File "...path.../resources.py", line 427, in dispatch
    response = method(request, **kwargs)

  File "...path.../resources.py", line 1051, in get_detail
    obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs))

  File "...path.../resources.py", line 921, in cached_obj_get
    bundle = self.obj_get(request=request, **kwargs)

  File "/...path.../resources.py", line 1765, in obj_get
    raise NotFound("Invalid resource lookup data provided (mismatched type).")

NotFound: Invalid resource lookup data provided (mismatched type).
"

}

Какие-нибудь мысли?


person Hedde van der Heide    schedule 27.07.2012    source источник


Ответы (3)


Правильно, ответ:

изменение prepend_urls на (устарело) override_urls исправляет ошибку, я сообщу об этом на github, похоже, проблема с яйцом 2.7

person Hedde van der Heide    schedule 27.07.2012
comment
Кажется сумасшедшим, это до сих пор не было обновлено в документации для deliciouspie. - person teewuane; 16.09.2014

Tastypie 0.10.0 использует prepend_urls, а не override_urls

http://django-tastypie.readthedocs.org/en/latest/resources.html?highlight=prepend_urls#Resource.override_urls

person Diaa Mohamed Kasem    schedule 23.12.2014

prepend_urls для версии deliciouspie 0.9.12a.

В deliciouspie v0.9.11 вместо этого следует использовать override_urls. (Согласно это.)

person Andrew Vavilov    schedule 28.08.2012