0
votes

I am trying to create a list of related or parent objects while creating a child object in django rest framework.

My Models are like this  

class Model2(models.Model):
    model1 = models.ForeignKey(Model1)
    name = models.CharField(max_length=100)
    display_name = models.CharField(max_length=100)

class Model3(models.Model):
    model1 = models.ForeignKey(Model1)
    kind = models.ForeignKey(Kind)
    model2 = models.ForeignKey(Model2)

and My Serializer classes are :

class Model2Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model2

class Model3Serializer(serializers.ModelSerializer):
    model2 = Model2Serializer(many=True)
class Meta:
    model = Model3
    fields = ('model1', 'model2')

My View is like :

class Model3View(generics.CreateAPIView):  
    serializer_class = Model3Serializer
    queryset = Model3.objects.all()

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # self.perform_create(serializer)
        print serializer.data
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

I am sending a list of objects in the field name model2.

model2 field in request.data is like

[
    {
        "name":"abcde",
        "display_name":"ghvhgvhg",
        "model1":1
    },
    {
        "name":"abcde", 
        "display_name":"ghvhgvhg",
        "model1":1
    }
]

but when i print serializer.data after checking serializer.is_valid() it show model2:[] in serailizer.data.

Why my data is lost while performing validations on data?

1

1 Answers

0
votes

This is because your Model3 can have only one instance of your Model2, is your Model2 that can be pointed by many instances of Model3

So your field model2 = Model2Serializer(many=True) is wrong, because a Model3 instance never may has "many instances of Model2"