Hi All,

I have created Nested serialization for one to many, it work fine on my 
windows machine while it dosnt work on my 2nd ubuntu machine. 
django 2.2
djangorestframework 3.11.1

*Error*
Got AttributeError when attempting to get a value for field `choice_set2` 
on serializer `QuestionSerializer`. The serializer field might be named 
incorrectly and not match any attribute or key on the `Question` instance. 
Original exception text was: 'Question' object has no attribute 
'choice_set2'.

Your help would be highly appreciated.! Thanks in advance

*Below is code. *
*admin.py*
from django.contrib import admin

# Register your models here.
from .models import Question, Choice

admin.site.register(Question)
admin.site.register(Choice)

*models.py*
import datetime

from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published', null=True)
    author = models.CharField(max_length=200, null=True)

    def __str__(self):
        return self.question_text
       
    #def was_published_recently(self):
        #now = timezone.now()
        #return now - datetime.timedelta(days=1) <= self.pub_date <= now
   

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

*serialize.py*
from rest_framework import serializers
from . models import Choice, Question

class ChoiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Choice
        fields = ('choice_text','votes')


class QuestionSerializer(serializers.ModelSerializer):
    choice_set2 = ChoiceSerializer(many=True)

    class Meta:
        model = Question
        fields = ('pub_date', 'question_text', 'choice_set2')
       # depth = 1

    def create(self, validated_data):
        choice_validated_data = validated_data.pop('choice_set2')
        question = Question.objects.create(**validated_data)
        print("Print question****")
        print(question)
        choice_set2_serializer = self.fields['choice_set2']
        for each in choice_validated_data:
            each['question'] = question
            print("printing child data***********")
            print(each)
        choices2 = choice_set2_serializer.create(choice_validated_data)
        return question

*views.py*
from django.shortcuts import render

# Create your views here.
#from django.http import HttpRespose
from django.shortcuts import get_object_or_404
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response
from django.http import HttpResponse, JsonResponse
from rest_framework import status
from rest_framework.decorators  import api_view
from django.views.decorators.csrf import csrf_exempt
from . models import Question, Choice
from . serializers import QuestionSerializer, ChoiceSerializer
from rest_framework import viewsets

class ClientAPIView3(viewsets.ViewSet):
   
    def list(self, request):
        client = Question.objects.all()
        print(client)
        serializer = QuestionSerializer(client, many=True)
        print(serializer)
        return Response(serializer.data)

    def create(self, request):
        #print(request.data)
        serializer = QuestionSerializer(data=request.data)
        if serializer.is_valid():
            print("in vew create() is_valid**************")
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        print("...may be not()?? "+str(serializer.errors))
        return Response(serializer.errors, 
status=status.HTTP_400_BAD_REQUEST)

    def retrive(self, request, pk):
        queryset = Client.objects.all()
        client = get_object_or_404(queryset, pk=pk)
        serializer = ClientSerializer(client)
        return Response(serializer.data)

*urls.py*
from django.urls import path, include
#from rest_framework.urlpatterns import format_suffix_patters
from .views import ClientAPIView3
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
#outer.register('ClientAPIView2',ClientAPIView2)
router.register('ClientAPIView3',ClientAPIView3, basename='ClientAPIView3')
#outer.register('DeliveryAddressAPIView2',DeliveryAddressAPIView2)

urlpatterns = [
    path('', include(router.urls)),
]

*test data*
{
"question_text":"BPM is?",
"pub_date":"2020-09-08T10:10",
    "author":"Sachin Agarwal",
   "choice_set":[{
            "choice_text": "Business Process Monitoring", "votes":10
        },
        {
            "choice_text": "Business Performance Measurement","votes":20
        }
        ]
}
Using SQLite db for this work.

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-rest-framework+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-rest-framework/92ac9cdc-939b-493c-8618-9499ff3cf33bn%40googlegroups.com.

Reply via email to