Skip to main content
 首页 » 编程设计

python之Django Rest Framework之针对 URL 进行过滤之TypeError as_view() 正好需要 1 个参数(给定 3 个)

2025年05月04日42小虾米

所以我正在尝试使用 Django Rest Framework。它将充当 Ionic 混合应用程序的 REST API。我需要能够使用街道名称参数(基于距离用户 GPS 位置最近的街道)从应用程序发送请求,该请求返回包含该街道名称的数据。我正在尝试关注 Filtering against the URL文档中的指南。

我的代码是这样的:

**urls.py** 
router = DefaultRouter() 
router.register(r'notes', views.NoteView, base_name='notes') 
 
urlpatterns = patterns('', 
                   url(r'^api/', include(router.urls)),namespace='rest_framework')), 
                   url('^notes/(?P<location>.+)/$', views.NoteView.as_view()), 
) 
 
**serializers.py** 
class NoteSerializer(serializers.ModelSerializer): 
    place = serializers.StringRelatedField() 
 
    class Meta: 
        model = Note 
        fields = ('text_content', 'from_date', 'place') 
 
**views.py** 
class NoteView(generics.ListAPIView): 
    serializer_class = NoteSerializer 
 
    def get_queryset(self): 
        location = self.kwargs['location'] 
        wreturn Note.objects.filter(place__name__contains=location) 

我不擅长正则表达式,但我想我需要放入 localhost/api/notes/streetname/来查询 api 中具有该街道名称的数据?

我得到的错误是: /api/notes/Vestergade/处的类型错误 as_view() 恰好接受 1 个参数(给定 3 个)

堆栈跟踪:

Environment: 
 
Request Method: GET 
Request URL: http://localhost:8000/api/notes/Vestergade/ 
 
Django Version: 1.8 
Python Version: 2.7.5 
Installed Applications: 
('django.contrib.admin', 
 'django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.messages', 
 'django.contrib.staticfiles', 
 'rest_framework', 
 'api') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.common.CommonMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
 'django.middleware.security.SecurityMiddleware') 
 
 
Traceback: 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
  119.                 resolver_match = resolver.resolve(request.path_info) 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve 
  366.             for pattern in self.url_patterns: 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns 
  402.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module 
  396.             self._urlconf_module = import_module(self.urlconf_name) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py" in import_module 
  37.     __import__(name) 
File "/Users/andersravn/Projekter/laverapi/citystoriesapi/citystoriesapi/urls.py" in <module> 
  17.                        url(r'^api/', include(router.urls)), 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/rest_framework/routers.py" in urls 
  79.             self._urls = patterns('', *self.get_urls()) 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/rest_framework/routers.py" in get_urls 
  315.         default_urls = super(DefaultRouter, self).get_urls() 
File "/Users/andersravn/Projekter/laverapi/lib/python2.7/site-packages/rest_framework/routers.py" in get_urls 
  256.                 view = viewset.as_view(mapping, **route.initkwargs) 
 
Exception Type: TypeError at /api/notes/Vestergade/ 
Exception Value: as_view() takes exactly 1 argument (3 given) 

我似乎无法弄清楚这 3 个参数是在哪里给出的。

请您参考如下方法:

只是偶然发现这个试图限制我的 API 对当前用户的请求。

是关于 View 类型的:generics.ListAPIView。它不应该是一个 View ,而是一个 View 集——检查这个问题 here

将其更改为 viewsets.ModelViewSet 或类似内容。