Re: reg: Object of type 'ListSerializer' is not JSON serializable
Wow..you nailed it brother, thank you. It solved the issue. Regards, Amitesh Sahay On Monday, 8 July, 2019, 10:32:13 pm IST, Jani Tiainen wrote: Hi. In your view instead of using Response(serializer) you need to use Response(serializer.data) HTH. ma 8. heinäk. 2019 klo 19.48 'Amitesh Sahay' via Django users kirjoitti: 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 + | ===Below are the details :-serializers.pyfrom 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.*)/$', StatusDetailAPIiew.as_view()), #url(r'^(?P.*)/update/$', StatusUpdateAPIView.as_view()), #url(r'^(?P.*)/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
Re: reg: Object of type 'ListSerializer' is not JSON serializable
Hi. In your view instead of using Response(serializer) you need to use Response(serializer.data) HTH. ma 8. heinäk. 2019 klo 19.48 'Amitesh Sahay' via Django users < django-users@googlegroups.com> kirjoitti: > 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 + > === > 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.*)/$', StatusDetailAPIiew.as_view()), > #url(r'^(?P.*)/update/$', StatusUpdateAPIView.as_view()), > #url(r'^(?P.*)/update/$', StatusDeleteAPIView.as_view()), > > ] > > project.urls.py > > from django.conf.urls import url, include > from django.contrib import admin > > urlpatterns = [ >