Mohsen
Mohsen

Reputation: 33

add instances to a manytomany field in django rest framework

I have a very simple question and I'm surprised it hasn't been asked before on this website. I have the two following models:

# models.py
class Film(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=150)
    genre = models.ManyToManyField(Genre)

class Genre(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, unique=True)

I need to make an API that gets 2 integers, id of movie and id of genre, and adds the said genre to the movie. seems very simple but I don't know how I could do this. I could really use the help.

Upvotes: 3

Views: 1595

Answers (1)

Nandan
Nandan

Reputation: 422

You might want this:

class GenreSerializer(serializers.ModelSerializer):
        class Meta:
            model = Genre
            fields = ('name', 'id')


class FilmSerializer(serializers.ModelSerializer):
    genre = GenreSerializer(many=True, read_only=False)

    class Meta:
        model = Film
        fields = ('name', 'id', 'genre')

    def update(self, instance, validated_data):
        genres_data = validated_data.pop('genre')
        instance = super(FilmSerializer, self).update(instance, validated_data)

        for genre_data in genres_data:
            genre_qs = Genre.objects.filter(name__iexact=genre_data['name'])

            if genre_qs.exists():
                genre = genre_qs.first()
            else:
                genre = Genre.objects.create(**genre_data)

            instance.genre.add(genre)

        return instance

Upvotes: 3

Related Questions