gpt4 book ai didi

python - page() 采用 1 个位置参数,但给出了 2 个

转载 作者:行者123 更新时间:2023-11-28 22:37:16 24 4
gpt4 key购买 nike

我正在尝试为搜索功能设计一个 API。搜索基于地名。我想要的是 localhost:8000/api/v1/rent/search/?format=json&q="california"但我收到一个错误,我在下面附上了 enter image description here

{
"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"
}

我的搜索 api 代码是

    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)

我错过了什么?

最佳答案

您使用的是 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.")

关于python - page() 采用 1 个位置参数,但给出了 2 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36674181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com