Django rest framework 如何将多个字段保存为值而不是id

Django rest framework 如何将多个字段保存为值而不是id,django-rest-framework,Django Rest Framework,我有下面的模型和连载器,在电影和流派之间有很多关系。但是,当我使用api为电影选择类型时,电影将使用类型id而不是类型名称保存。如何使用流派名称而不是id进行保存 型号。py: class Genre(models.Model): genre = models.CharField(max_length=50, unique=True) def __str__(self): return self.genre class Movie(models.Model):

我有下面的模型和连载器,在电影和流派之间有很多关系。但是,当我使用api为电影选择类型时,电影将使用类型id而不是类型名称保存。如何使用流派名称而不是id进行保存

型号。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')
序列化程序.py

class GenreSerializer(ModelSerializer):
    class Meta:
        model = Genre
        fields = (genre, )

class MovieSerializer(ModelSerializer):
    class Meta:
        model = Movie
        fields = ('id', 'name', 'release_date', 'genre', )
我通过API插入了以下3种类型: 1.恐怖 2.喜剧片 3.动画

当我用类型恐怖和喜剧保存一部名为“恐怖电影”的电影时,它会用类型ID而不是它们的值(即恐怖和喜剧)保存如下:

使用下面的api列出所有保存的电影时,显示如下 /api/电影

{
    "id": 1
    "name": "Scary Movie",
    "release date": 2000-07-13,
    "genre": [
    1,
    2
]
}

如何使用流派名称而不是流派id保存电影?

您可以使用如下嵌套序列化程序:

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"
            }
        ]
    }, ...
]