Django-rest-framework, nested objects in Serializers
django-rest-framework, nested, serialization
Solution
Can you confirm that you're sending a JSON encoded request - i.e. the request has the content type set to JSON ? If not, the post is most probably send using form format which doesn't support nested.
Problem
I would like to have a nested object inside a serializer instead of just the foreignkey (or url). As this documentation says, I just had to specify the serializer class of the nested object in the parent serializer: ``` # Models class NestedSample(models.Model): something = models.CharField(max_length=255) class Sample(models.Model): thing = models.BooleanField() nested = models.ForeignKey(NestedSample) # Serializers class NestedSampleSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = api_models.NestedSample class SampleSerializer(serializers.HyperlinkedModelSerializer): nested = NestedSampleSerializer() # HERE! class Meta: model = api_models.Sample # Views class NestedSampleViewSet(viewsets.ModelViewSet): queryset = api_models.NestedSample.objects.all() serializer_class = api_serializers.NestedSampleSerializer class SampleViewSet(viewsets.ModelViewSet): queryset = api_models.Sample.objects.all() serializer_class = api_serializers.SampleSerializer ``` This works very well when I get the objects, but it is not possible to create (=`POST`) `Sample` objects anymore, I get the error: ``` {u'non_field_errors': [u'Invalid data']} ``` I tried to overwrite the `create` method in the viewset to get the object using the pk: ``` class SampleViewSet(viewsets.ModelViewSet): queryset = api_models.Sample.objects.all() serializer_class = api_serializers.SampleSerializer def create(self, request): request.DATA['nested'] = get_object_or_404(api_models.NestedSample, pk=request.DATA['nested']) return super(SampleViewSet, self).create(request) ``` But it doesn't work as well. Any idea? I also found this question I can relate with which of course solves the problem but do not let me expose the full nested object, so back to the beginning. Thanks,