将实例添加到 django rest 框架中的 manytomany 字段
add instances to a manytomany field in django rest framework
我有一个非常简单的问题,令我惊讶的是之前该网站上没有人问过这个问题。
我有以下两个型号:
# 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)
我需要创建一个 API 来获取 2 个整数、电影 ID 和流派 ID,并将所述流派添加到电影中。看起来很简单,但我不知道我该怎么做。我真的需要帮助。
你可能想要这个:
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
我有一个非常简单的问题,令我惊讶的是之前该网站上没有人问过这个问题。 我有以下两个型号:
# 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)
我需要创建一个 API 来获取 2 个整数、电影 ID 和流派 ID,并将所述流派添加到电影中。看起来很简单,但我不知道我该怎么做。我真的需要帮助。
你可能想要这个:
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