Skip to main content
 首页 » 编程设计

python之Django 错误 __init__() 采用 1 个位置参数,但给出了 2 个

2025年05月04日25kerrycode

我目前正在使用 django 2.1 制作一个简单的获取/发布 api。在我运行服务器并转到 .../article/url 后,它返回一个错误

init() takes 1 positional argument but 2 were given

追溯:

Environment: 
 
 
Request Method: GET 
Request URL: http://127.0.0.1:8000/article/ 
 
Django Version: 2.1 
Python Version: 3.6.5 
Installed Applications: 
['django.contrib.admin', 
 'django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.messages', 
 'django.contrib.staticfiles', 
 'rest_framework', 
 'api.apps.ApiConfig'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.common.CommonMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'django.middleware.clickjacking.XFrameOptionsMiddleware'] 
 
 
 
Traceback: 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\django-2.1-py3.6.egg\django\core\handlers\exception.py" in inner 
  34.             response = get_response(request) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\django-2.1-py3.6.egg\django\core\handlers\base.py" in _get_response 
  126.                 response = self.process_exception_by_middleware(e, request) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\django-2.1-py3.6.egg\django\core\handlers\base.py" in _get_response 
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\django-2.1-py3.6.egg\django\views\decorators\csrf.py" in wrapped_view 
  54.         return view_func(*args, **kwargs) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\django-2.1-py3.6.egg\django\views\generic\base.py" in view 
  68.             return self.dispatch(request, *args, **kwargs) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\rest_framework\views.py" in dispatch 
  483.             response = self.handle_exception(exc) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\rest_framework\views.py" in handle_exception 
  443.             self.raise_uncaught_exception(exc) 
 
File "C:\Users\admin\Miniconda3\lib\site-packages\rest_framework\views.py" in dispatch 
  480.             response = handler(request, *args, **kwargs) 
 
File "C:\Users\admin\Desktop\crawler\api\views.py" in get 
  13.         article_serializer = ArticleSerializer(article, many=True) 
 
Exception Type: TypeError at /article/ 
Exception Value: __init__() takes 1 positional argument but 2 were given 

我的模型.py

from django.db import models 
# Create your models here. 
class Article(models.Model): 
    class Meta: 
        verbose_name_plural = "Article" 
        verbose_name = "Article" 
 
    id = models.ForeignKey('ArticlePicture', on_delete=models.CASCADE,primary_key=True) 
    type = models.CharField(max_length=256, null=True) 
    name = models.CharField(max_length=256, null=True) 
    title = models.CharField(max_length=256, null=True) 
    address = models.TextField(null=True) 
    city = models.CharField(max_length=256, null=True) 
    price = models.CharField(max_length=256,null=True) 
    area = models.CharField(max_length=256,null=True) 
    description = models.TextField(null=True) 
    sell_date = models.TextField(null=True) 
    expired_date = models.TextField(null=True) 
    website = models.ForeignKey('Website', on_delete=models.CASCADE,default=1) 
    website_uuid = models.CharField(max_length=256, null=True) 
    seller_name = models.CharField(max_length=256, null=True) 
    seller_address = models.CharField(max_length=256, null=True) 
    seller_phone = models.CharField(max_length=256, null=True) 
    seller_mobile = models.CharField(max_length=256, null=True) 
    seller_email = models.CharField(max_length=256, null=True) 
    seller_picture = models.TextField(null=True) 
    project_name = models.CharField(max_length=256,null=True) 
    project_investor = models.CharField(max_length=256,null=True) 
    extended_data = models.TextField(null=True) 
 
    def __str__(self): 
         return self.id 
class Website(models.Model): 
    class Meta: 
        verbose_name_plural = "Website" 
        verbose_name = "Website" 
 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=256,null=True) 
    url = models.TextField(null=True) 
 
    def __str__(self): 
        return self.id 
class ArticlePicture(models.Model): 
    class Meta: 
        verbose_name_plural = "ArticlePicture" 
        verbose_name = "ArticlePicture" 
 
    id = models.AutoField(primary_key=True) 
    article_id = models.ForeignKey(Article, on_delete=models.CASCADE) 
    url = models.TextField(null=True) 
 
    def __str__(self): 
        return self.id 

VIEWS.PY:

from rest_framework import serializers 
from rest_framework import serializers, viewsets, status 
from rest_framework.response import Response 
from django.contrib import admin, auth 
from .serializers import ArticleSerializers, ArticlePictureSerializers 
from .models import Article, ArticlePicture 
from rest_framework.views import APIView 
from django.http import Http404 
from django.shortcuts import render 
class ArticleSerializer(APIView): 
    def get(self, request): 
        article = Article.objects.all() 
        article_serializer = ArticleSerializer(article, many=True) 
        return Response(article_serializer.data) 
    def post(self, request): 
        article_serializers = ArticleSerializer(data = request.data) 
        if article_serializers.is_valid(): 
            article_serializers.save() 
            return Response(article_serializers.data, status=status.HTTP_201_CREATED) 
        return Response(article_serializers.errors, status=status.HTTP_400_BAD_REQUEST) 
class ArticlePictureSerializer(APIView): 
    def get(self, request): 
        article_picture = ArticlePicture.objects.all() 
        article_picture_serializer = ArticlePictureSerializers(article, many=True) 
        return Response(article_picture_serializer.data) 
    def post(self, request): 
        article_picture_serializers = ArticlePictureSerializers(data = request.data) 
        if article_picture_serializers.is_valid(): 
            article_picture_serializers.save() 
            return Response(article_picture_serializers.data, status=status.HTTP_201_CREATED) 
        return Response(article_picture_serializers.errors, status=status.HTTP_400_BAD_REQUEST)   

序列化器.PY:

from rest_framework import serializers 
from .models import Article, ArticlePicture 
class ArticleSerializers(serializers.ModelSerializer): 
    class Meta: 
        model = Article 
        fields = '__all__' 
class ArticlePictureSerializers(serializers.ModelSerializer): 
    class Meta: 
        model = ArticlePicture 
        fields = '__all__' 

和我的 URLS.PY:

from django.contrib import admin 
from django.urls import path 
from django.conf.urls import url, include 
from api import views 
from rest_framework.urlpatterns import format_suffix_patterns 
from rest_framework import routers 
urlpatterns = [ 
    path('admin/', admin.site.urls), 
    path('article/',views.ArticleSerializer.as_view()), 
    path('articlepic/',views.ArticlePictureSerializer.as_view()), 
] 
urlpatterns = format_suffix_patterns(urlpatterns) 

我在路径之后添加了 .as_view() 并且它仍然返回,我仍在尝试弄清楚我做错了什么。

请您参考如下方法:

你有相同的 View 和序列化器名称,尝试重命名 View 类,例如:

VIEWS.PY:

... 
class ArticleAPI(APIView): 
    def get(self, request): 
        article = Article.objects.all() 
        article_serializer = ArticleSerializer(article, many=True) 
 
...