Abilash K.G
Abilash K.G

Reputation: 35

Count the no of movies in django rest framework

I want to count the no of movies worked by the actors in api. i have tried this but not working models.py

class Actor(models.Model):
    actors = models.CharField(max_length=100)

class Genre(models.Model):
    genre = models.CharField(max_length=100)
    
class Movie(models.Model):
    name = models.CharField(max_length=100)
    actors = models.ManyToManyField(Actor, related_name="actor_movies")
    genre = models.ManyToManyField(Genre,related_name="genre_movies")

serializers.py

class ActorSerializer(serializers.HyperlinkedModelSerializer):
    actor_movies = serializers.RelatedField(source='actor.movies', read_only = True)
    class Meta:
        model = Actor
        fields = ['id','actors','actor_movies']

class GenreSerializer(serializers.HyperlinkedModelSerializer):
    genre_movies = serializers.RelatedField(source='genre.names', read_only = True)
    class Meta:
        model = Genre
        fields = ['id','genre','genre_movies']

class MovieSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Movie
        fields = ['url','name','actors','genre']

im getting output like this

[
    {
        "id": 1,
        "genre": "Ajith"
    },
    {
        "id": 2,
        "genre": "Vijay"
    }
]

in actual output i need the total no of movies he worked also.

Upvotes: 1

Views: 53

Answers (1)

ThomasGth
ThomasGth

Reputation: 870

You can use a SerializerMethodField:

class ActorSerializer(serializers.HyperlinkedModelSerializer):
    count_actor_movies= serializers.SerializerMethodField()

    def get_count_actor_movies(self, instance):
        return instance.actor_movies.count()

    class Meta:
        model = Actor
        fields = ['id','actors','count_actor_movies']

For more details, the official docs are here.

Upvotes: 1

Related Questions