Reputation: 33
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
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