pythondjangodjango-modelsdjango-rest-frameworkdjango-serializer

Django rest framework serializing many to many field


How do I serialize a many-to-many field into list of something, and return them through rest framework? In my example below, I try to return the post together with a list of tags associated with it.

models.py

class post(models.Model):
    tag = models.ManyToManyField(Tag)
    text = models.CharField(max_length=100)

serializers.py

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ("text", "tag"??)

views.py

class PostViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

Solution

  • You will need a TagSerializer, whose class Meta has model = Tag. After TagSerializer is created, modify the PostSerializer with many=True for a ManyToManyField relation:

    class PostSerializer(serializers.ModelSerializer):
        tag = TagSerializer(read_only=True, many=True)
    
        class Meta:
            model = Post
            fields = ('tag', 'text',)
    

    Answer is for DRF 3