【问题标题】:DRF TypeError __init__() takes exactly 1 argument (2 given)DRF TypeError __init__() 正好采用 1 个参数(给定 2 个)
【发布时间】:2015-03-19 22:53:51
【问题描述】:

当我尝试通过网络浏览器发出 GET 请求时出现此错误。
这是我的第一个 DRF 项目,我尝试制作一个 api 以便能够在移动应用程序上使用它。我认为问题出在我的views.py中 这是一些代码 sn-ps 和 Traceback:

models.py

from django.db import models


# Create your models here.

class Expediteur(models.Model):
    nom = models.CharField(max_length=50)
    prenom = models.CharField(max_length=100)
    adresse = models.CharField(max_length=200)
    tel = models.IntegerField()

serializers.py

from rest_framework import serializers
from api.models import Expediteur, Destinataire, LettrePrio, TypeLettreReco, LettreReco, TimbrePrio, TimbreReco


class ExpediteurSerializer(serializers.ModelSerializer):
    class Meta:
        model = Expediteur

views.py

from django.shortcuts import render, get_object_or_404
from rest_framework import viewsets, status, HTTP_HEADER_ENCODING
from rest_framework.views import APIView
from rest_framework.response import Response
from api.serializers import ExpediteurSerializer, DestinataireSerializer, LettrePrioSerializer, TypeLettreRecoSerializer, LettreRecoSerializer, TimbrePrioSerializer, TimbreRecoSerializer
from api.models import Expediteur, Destinataire, LettrePrio, TypeLettreReco, LettreReco, TimbrePrio, TimbreReco

import json
import datetime

from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import user_passes_test
from django.contrib.auth import login
from django.core.exceptions import ObjectDoesNotExist
from django.views.decorators.csrf import csrf_exempt
from django.utils.timezone import get_current_timezone
from django.db.models.query import QuerySet
from rest_framework.generics import GenericAPIView

# Create your views here.

class ExpeViewSet(APIView):
    queryset = Expediteur.objects.all()
    serializer_class = ExpediteurSerializer

    def get(self, request):
        if request.GET.get("id"):
            queryset = Expediteur.objects.filter(id=request.GET["id"]).all()
        else:
            queryset = Expediteur.objects.all()
        serializer = self.serializer_class(queryset, many=True)
        return Response(serializer.data)

    def list(self,request):
          queryset  = self.Expediteur.objects.all()
          serializer = ExpediteurSerializer(self.get_queryset(), many=True)
          return Response(serializer.data)

    def post(self, request):
        serializer = self.serializer_class(data=request.DATA)
        return Response(status=status.HTTP_201_CREATED)

urls.py

from django.conf.urls import patterns, include, url
from rest_framework import routers
from django.contrib import admin
import api

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'CUP.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^api/', 'api.views.ExpeViewSet'),
)

追溯

Environment:


Request Method: GET
Request URL: http://0.0.0.0:8000/api/expediteur/

Django Version: 1.7.1
Python Version: 2.7.6
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')


Traceback:
File "/Library/Python/2.7/site-packages/Django-1.7.1-py2.7.egg/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

Exception Type: TypeError at /api/expediteur/
Exception Value: __init__() takes exactly 1 argument (2 given)

【问题讨论】:

  • 请出示您的 urls.py。
  • @DanielRoseman 刚刚编辑了我的帖子。

标签: python django python-2.7


【解决方案1】:

您不会创建这样的网址。 ApiView 是一个类,需要使用as_view 类方法,直接引用该类,而不是字符串:

url(r'^api/', api.views.ExpeViewSet.as_view()),

【讨论】:

  • 我知道我给的名字不会让我的班级成为 ViewSet,但我做错了什么,我该如何解决这个问题?
  • 对不起,这个答案有误导性,我已经替换了它。
  • 感谢您的帮助,我刚刚修复了它,但现在我有一个 AttributeError 'module' 对象没有属性 'views',我的导入有什么问题吗?
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多