断言错误,您将 Serializer 实例作为数据传递,但可能意味着传递序列化的“.data”或“.error”。表示

Assertation Error, You passed a Serializer instance as data, but probably meant to pass serialized `.data` or `.error`. representation

我正在学习 drf。我用它创建了 api 迷你市场应用程序。创建一些数据后,我试图获取所有这些数据,但我得到了 AssertationError,例如“您将一个 Serializer 实例作为数据传递,但可能意味着传递序列化的 .data.error。表示。 “ :( 谁知道,我能做什么?

views.py

@api_view(['GET'])
def view_items(request):
    
    # checking for the parameters from the URL
    items = Item.objects.all()

    # if there is something in items else raise error
    if items:
        return Response(ItemSerializer(items))
    else:
        return Response(status=status.HTTP_404_NOT_FOUND)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.ApiOverview, name='home'),
    path('create/', views.add_items, name='add-items'),
    path('all/', views.view_items, name='view_items'),
]

serializers.py

from pyexpat import model
from django.db.models import fields
from rest_framework import serializers
from .models import Item

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('category', 'subcategory', 'name', 'amount')

如错误所述,您不能 return 响应中的序列化程序:

return Response(ItemSerializer(items))

你可以return序列化器的数据,所以:

@api_view(['GET'])
def view_items(request):
    # checking for the parameters from the URL
    items = Item.objects.all()
    serializer = ItemSerializer(items<strong>, many=True</strong>)

    # if there is something in items else raise error
    if items:
        return Response(<strong>serializer.data</strong>)
    else:
        return Response(status=status.HTTP_404_NOT_FOUND)