2016-04-17 4 views
2

Я пытаюсь создать api для поиска. Поиск основан на месте name.What я хочу локальный: 8000/API/v1/аренда/поиск/= формат JSON & д = «калифорния», но я получаю сообщение об ошибке, которое я прилагаю ниже enter image description hereстраница() принимает 1 позиционный аргумент, но 2 дано

{ 
    "error_message": "page() takes 1 positional argument but 2 were given", 
    "traceback": "Traceback (most recent call last):\n\n File \"/home/tushant/.virtualenvs/rent/lib/python3.4/site-packages/tastypie/resources.py\", line 211, in wrapper\n response = callback(request, *args, **kwargs)\n\n File \"/home/tushant/Projects/rentals-v2.1/rentals/api/api.py\", line 102, in get_search\n page = paginator.page(int(request.GET.get('page', 1)))\n\nTypeError: page() takes 1 positional argument but 2 were given\n" 
} 

мой код для поиска АФИ

from rentals.models import Rental,Gallery 
    from django.core.paginator import InvalidPage 
    from django.conf.urls import * 
    from tastypie.paginator import Paginator 
    from tastypie.exceptions import BadRequest 
    from tastypie.resources import ModelResource 
    from tastypie.utils import trailing_slash 
    from haystack.query import SearchQuerySet 
    class SearchResource(ModelResource): 
     class Meta: 
      queryset = Rental.objects.all() 
      resource_name = 'rent' 

    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/search%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_search'), name="api_get_search"), 
     ] 

    def get_search(self, request, **kwargs): 
     self.method_check(request, allowed=['get']) 
     self.is_authenticated(request) 
     self.throttle_check(request) 

     # Do the query. 
     sqs = SearchQuerySet().models(Rental).load_all().auto_query(request.GET.get('q', '')) 
     paginator = Paginator(sqs, 20) 

     try: 
      page = paginator.page(int(request.GET.get('page', 1))) 
     except InvalidPage: 
      raise Http404("Sorry, no results on that page.") 

     objects = [] 

     for result in page.object_list: 
      bundle = self.build_bundle(obj=result.object, request=request) 
      bundle = self.full_dehydrate(bundle) 
      objects.append(bundle) 

     object_list = { 
      'objects': objects, 
     } 

     self.log_throttled_access(request) 
     return self.create_response(request, object_list) 

мой models.py является

class Rental(models.Model): 
     city = models.CharField(_("City"), max_length=255, blank=False,null=True, 
      help_text=_("City of the rental space")) 
     place = models.CharField(_("Place"), max_length=255, blank=False,null=True, 
      help_text=_("Place of the rental space")) 

    class Gallery(models.Model): 
     rental = models.ForeignKey('Rental', null=True, on_delete=models.CASCADE,verbose_name=_('Rental'), related_name="gallery") 
     image = models.ImageField(blank=True,upload_to='upload/',null=True) 

Что мне не хватает?

+0

Вы должны включить полный стек след в вашем вопросе – Sayse

+0

пожалуйста, объявление о StackTrace как текст, а не воображаемой – e4c5

+0

постраничной навигации. page() не принимает никаких аргументов: http://django-tastypie.readthedocs.org/en/latest/paginator.html – Selcuk

ответ

4

Вы используете класс Tastypie Paginator, который автоматически определяет текущую страницу на основе запросов, переданных ей, в отличие от класса Django Paginator, который требует, чтобы вы проходили индекс страницы.

Вот код с соответствующими комментариями: https://github.com/django-tastypie/django-tastypie/blob/master/tastypie/paginator.py#L26

Попробуйте это:

paginator = Paginator(request.GET, sqs, limit=20) 

    try: 
     page = paginator.page() 
    except InvalidPage: 
     raise Http404("Sorry, no results on that page.") 
+1

Это сработало. Я получаю No module с именем «whoosh.codec.whoosh2 error», который я разрешу. Спасибо за вашу помощь. – pri