reg: Object of type 'ListSerializer' is not JSON serializable

4,714 views
Skip to first unread message

Amitesh Sahay

unread,
Jul 8, 2019, 12:48:56 PM7/8/19
to Django Users
hello Members, 

I am working on some POC for django rest framework. Its very simple setup, nothing complicated. While I was doing my testing I am facing below error:

===================================

TypeError at /api/status/

Object of type 'ListSerializer' is not JSON serializable
Request Method:GET
Request URL:http://127.0.0.1:8000/api/status/
Django Version:1.11.8
Exception Type:TypeError
Exception Value:
Object of type 'ListSerializer' is not JSON serializable
Exception Location:/usr/lib/python3.6/json/encoder.py in default, line 180
Python Executable:/root/PycharmProjects/vrest/bin/python
Python Version:3.6.5
Python Path:
['/root/PycharmProjects/src',
 '/usr/local/buildtools/current/sitecustomize',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/root/PycharmProjects/vrest/lib/python3.6/site-packages']
Server time:Mon, 8 Jul 2019 16:03:26 +0000
===================================
Below are the details :
-----------------------------
serializers.py
from rest_framework import serializers
from STATUS.models import Status


class StatusSerializer(serializers.ModelSerializer):
class Meta:
model = Status
fields = [
'user',
'content',
'image'
]

def validate_content(self, value):
if len(value) > 500:
raise serializers.ValidationError("way too long string")

def validate(self, data):
content = data.get('content', None)
if content =='':
content = None
image = data.get('image', None)
if content is None and image is None:
raise serializers.ValidationError('Required fields')
return data

models.py
-------------
from django.db import models
from django.conf import settings


def upload_status_image(instance, filename):
return "updates/{user}/{filename}" .format(user=instance.user, filename=filename)


class StatusQuerySet(models.QuerySet):
pass


class StatusManager(models.Manager):
def get_queryset(self):
return StatusQuerySet(self.model, using=self._db)


class Status(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
content = models.TextField(null=True, blank=True)
image = models.ImageField(upload_to=upload_status_image)
updated = models.DateTimeField
timestamp = models.DateTimeField(auto_now_add=True)

objects = StatusManager()

def __str__(self):
return str(self.content)[:50]

class Meta:
verbose_name = 'status post'
verbose_name_plural = 'status posts'
views.py

from django.views.generic import View
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import StatusSerializer
from STATUS.models import Status


class StatusListSearchAPIView(APIView):
permission_classes = []
authentication_classes = []

def get(self, request, format=None):
qs = Status.objects.all()
serializer = StatusSerializer(qs, many=True)
return Response(serializer)
forms.py

from django import forms
from .models import Status

class StatusForm(forms.ModelForm):
class Meta:
model = Status
fields = [
'user',
'content',
'image'
]

def clean_content(self, *args, **kwargs):
content = self.cleaned_data.get('content')
if len(content) > 240:
raise forms.ValidationError('Content is too long')
return content

def clean(self, *args, **kwargs):
data = self.cleaned_data
content = data.get('content', None)
if content == '':
content = None

image = data.get('image', None)
if content is None and image is None:
raise forms.ValidationError('Content or image is required..')
return super().clean(*args, **kwargs)
app.urls.py

from django.conf.urls import url, include
from django.contrib import admin
from .views import StatusListSearchAPIView

urlpatterns = [
url(r'^$', StatusListSearchAPIView.as_view()),
#url(r'^create/$', StatusCreateAPIView.as_view()),
#url(r'^(?P<id>.*)/$', StatusDetailAPIiew.as_view()),
#url(r'^(?P<id>.*)/update/$', StatusUpdateAPIView.as_view()),
#url(r'^(?P<id>.*)/update/$', StatusDeleteAPIView.as_view()),

]
project.urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'api/status/', include('STATUS.API.urls')),
]
Project Structure : attached with the email, if not found do let me know I will re-attach



Project name:      google
APP name:           STATUS
django version :  1.11
python version :  3.6
djangorestframework : 3.9.4


Regards,
Amitesh Sahay
1562604240059blob.jpg

Jani Tiainen

unread,
Jul 8, 2019, 1:02:27 PM7/8/19
to django...@googlegroups.com
Hi.

In your view instead of using Response(serializer) you need to use Response(serializer.data)

HTH.


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/1812294846.4496775.1562604488272%40mail.yahoo.com.
For more options, visit https://groups.google.com/d/optout.

Amitesh Sahay

unread,
Jul 8, 2019, 1:04:49 PM7/8/19
to django...@googlegroups.com
Wow..you nailed it brother, thank you. It solved the issue.

Regards,
Amitesh Sahay


Reply all
Reply to author
Forward
0 new messages