2016-04-03 2 views
1

Я пытаюсь создать api для поиска. Я хочу API для реализации в реакции. То, что я хочу, это/api/v1/rent/search/place = "place name", но я этого не понимаю. Что я сделалСоздайте API поиска с помощью django tastypie

api.py

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) 

Что еще я должен сделать, чтобы достичь URL, как API/v1/аренду/search/place = "place name" (я хочу выполнить поиск с названия места)?

Я получаю следующее сообщение об ошибке traceback

+0

я получаю ошибку, когда я это сделать апи/v1/searchRent/поиск/формат = JSON – pri

+0

? Какая у вас ошибка? Предоставьте весь стек, если он есть – Railslide

+0

. Я приложил ошибку в своем вопросе сейчас. – pri

ответ

1

Добавить это в верхней части файла Python:

from django.core.paginator import InvalidPage 
+0

Если я делаю http: // localhost: 8000/api/v1/rent/q = "place name" /? Format = json, я получаю сообщение об ошибке. – pri

+0

Попробуйте localhost: 8000/api/v1/rent /? Format = json & q = "place% 20name" –

+0

когда я делаю localhost: 8000/api/v1/rent /? Format = json & q = "california" Я получаю не только результаты места, называемого калифорния, но все места. – pri

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