2013-03-01 1 views
7

Я пытаюсь использовать пример здесь: http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resourcesTastypie Вложенные ресурсы - cached_obj_get() занимает ровно 2 аргумента (1 дал)

по какой-то причине я получаю:

cached_obj_get() занимает ровно . 2 аргументы (1) с учетом

, хотя я четко называть его с 2-мя аргументами (точно, как в вышеупомянутом примере это мой код:

def prepend_urls(self): 
    return [ 
     url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/feed%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_feed'), name="api_get_feed"), 
] 

def get_feed(self, request, **kwargs): 
    try: 
     obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs)) 
    except ObjectDoesNotExist: 
     return HttpGone() 
    except MultipleObjectsReturned: 
     return HttpMultipleChoices("More than one resource is found at this URI.") 

    feed_resource = FeedItemResource() 
    return feed_resource.get_list(request, p_id=obj.id) 

ответ

14

Извините за сумбур - там был API change to improve authorization, который изменил подпись для cached_obj_get от:

def cached_obj_get(self, request=None, **kwargs): 

в

def cached_obj_get(self, bundle, **kwargs): 

Это изменение соответствует идти вперед - и если вы нуждались в request объект, он доступен как bundle.request - но, очевидно, документация нуждается в обновлении.

Вы можете построить объект пучка с:

basic_bundle = self.build_bundle(request=request) 

затем использовать его в качестве аргумента cached_obj_get (см Resource.get_detail source code в качестве примера):

obj = self.cached_obj_get(bundle=basic_bundle, **self.remove_api_resource_names(kwargs)) 

Другой аспект запутанной, если вы не знакомый с объектной моделью Python, состоит в том, что методы всегда получают хотя бы один аргумент, потому что первый позиционный аргумент всегда равен object instance or self, а аргументы ключевого слова не включены в этот счет, поэтому «1 данный» означает, что я thod получил только self позиционный аргумент, когда он ожидал self и bundle.

+0

Спасибо Дэвиду Р. за объяснение того, как построить комплект и добавить пример! –

+0

Я наткнулся на этот ответ, ища такое же сообщение об ошибке для obj_get(). Этот ответ выполняется и obj_get() –

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

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