如何反序列化嵌套的 Django object

How to deserialize nested django object

我不太确定如何使用 one-to-many 关系访问嵌套序列化程序的数据。

这是我的模型:

class Album(models.Model):
    id = models.CharField(max_length=255, null=True, blank=True)
    name = models.CharField(max_length=255, null=True, blank=True)

class Title(models.Model):
    name = models.CharField(max_length=255, null=True, blank=True)
    album = models.ForeignKey(
        Album,
        related_name='titles'
    )

然后我有 2 个序列化程序:

class AlbumSerializer(serializers.ModelSerializer):
    titles = TitleSerializer(many=True)

    class Meta:
        model = Album
        fields = ['id', 'name', 'titles']

    def create(self, validated_data):
        album = Album.objects.create(
            id=validated_data.get('id'),
            name=validated_data.get('name')
        )

        titles = validated_data.pop('titles')
        for title in titles:
            title['album'] = album
            _title = Title(**title)
            _title.save()
        return album


class TitleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Title
        fields = ['name']

要反序列化并保存我 运行 以下内容:

album = AlbumSerializer(data=input_json)
album.is_valid()
album.save()

我现在的问题是,我无法访问这些项目。访问 album.instance.titles 的类型让我得到 <class 'django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager'>。 我怎样才能从中获取标题,或者我做错了什么,因为我没有在其中获取标题列表?

您需要在 RelatedManager 上调用 all() 来执行数据库查询并获取结果

album.instance.titles.all()

A RelatedManager 就像一个普通的模型管理器 (Model.objects),它检索由关系过滤的对象