如何反序列化嵌套的 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
),它检索由关系过滤的对象
我不太确定如何使用 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
),它检索由关系过滤的对象