【问题标题】:TypeError at /api/products/1 save() missing 1 required positional argument: 'self'/api/products/1 save() 的 TypeError 缺少 1 个必需的位置参数:'self'
【发布时间】:2021-03-02 13:00:24
【问题描述】:

所以我正在尝试使用 django rest 框架制作 rest API,我想这样做,以便当我发出补丁请求时,我可以更新模型或对象,但是当我尝试这样做时,我得到 TypeError /api/products/1 save() 缺少 1 个必需的位置参数:'self' 错误

views.py

class DetailView(APIView):
    def get(self, request, id ,format=None):
        product = get_object_or_404(Product, pk=id)
        serializer = ProductSerializer(product)
        return Response(serializer.data)

    def patch(self, request, id, format=None):
        product = get_object_or_404(Product, pk=id)
        serializer = ProductSerializer(Product, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

完整的追溯


Traceback (most recent call last):
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/arpit/Desktop/Coding Projects/React-ECom/backend/API/views.py", line 39, in patch
    serializer.save()
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/serializers.py", line 200, in save
    self.instance = self.update(self.instance, validated_data)
  File "/home/arpit/anaconda3/envs/djangoProject/lib/python3.7/site-packages/rest_framework/serializers.py", line 983, in update
    instance.save()

Exception Type: TypeError at /api/products/1
Exception Value: save() missing 1 required positional argument: 'self'

序列化器.py

from rest_framework import serializers
from .models import Product

class ProductSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Product
        fields = [ 'id','name','price','description']

【问题讨论】:

  • 能否分享完整的错误回溯
  • 当然!我编辑了我的帖子并添加了回溯
  • 您的 ProductSerializer 中可能有错误。你能显示 ProductSerializer
  • 我也添加了serializers.py

标签: python django django-rest-framework


【解决方案1】:

在这一行

serializer = ProductSerializer(Product, data=request.data)

我认为您的意思是传入 product 实例而不是 Product 类。

product = get_object_or_404(Product, pk=id)
serializer = ProductSerializer(product, data=request.data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2022-12-11
    • 2018-04-05
    • 2021-12-15
    • 2023-02-06
    相关资源
    最近更新 更多