我有以下模型和序列化器,电影和体裁之间具有ManyToMany关系。但是,当我选择具有api的电影的流派时,该影片将以流派ID(而不是流派名称)保存。如何保存类型名称而不是ID。
Models.py:
class Genre(models.Model):
genre = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.genre
class Movie(models.Model):
name = models.CharField(max_length=50)
release_date = models.DateField()
genre = models.ManyToManyField(Genre, related_name='movie')
Serializers.py
class GenreSerializer(ModelSerializer):
class Meta:
model = Genre
fields = (genre, )
class MovieSerializer(ModelSerializer):
class Meta:
model = Movie
fields = ('id', 'name', 'release_date', 'genre', )
我通过API插入了以下三种流派: 1.恐怖 2.喜剧片 3.动画
当我用恐怖和喜剧类型保存名为“恐怖电影”的电影时,它以下面的类型ID(而不是它们的值)(即恐怖和喜剧)被保存下来:
使用以下api列出所有已保存的电影时,显示如下 / api / movie
{
"id": 1
"name": "Scary Movie",
"release date": 2000-07-13,
"genre": [
1,
2
]
}
如何使电影保存为流派名称而不是流派ID?
答案 0 :(得分:0)
您可以像这样使用嵌套的序列化器:
class GenreSerializer(ModelSerializer):
class Meta:
model = Genre
fields = (genre,)
class MovieSerializer(ModelSerializer):
genre = GenreSerializer(many=True)
class Meta:
model = Movie
fields = ('id', 'name', 'release_date', 'genre')
这应该导致:
[
{
"id": 1
"name": "Scary Movie",
"release date": 2000-07-13,
"genre": [
{
"genre": "Horror"
},
{
"genre": "Comedy"
}
]
}, ...
]