Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm learning drf. I created api using it for minimarket app. After creating some data, i tried to get all of them and i got AssertationError like "You passed a Serializer instance as data, but probably meant to pass serialized .data or .error. representation. " :( Who knows, what can i do?

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')
like image 215
Jaloliddin Murodullaev Avatar asked Nov 01 '25 17:11

Jaloliddin Murodullaev


1 Answers

As the error says, you can not return a serializer in the response:

return Response(ItemSerializer(items))

You can return the data of the serializer, so:

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

    # if there is something in items else raise error
    if items:
        return Response(serializer.data)
    else:
        return Response(status=status.HTTP_404_NOT_FOUND)
like image 53
Willem Van Onsem Avatar answered Nov 04 '25 13:11

Willem Van Onsem