我不太确定如何以一对多关系访问嵌套序列化器的数据。
这是我的模特:
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'>
。
如何获取其中的标题,或者我没有在其中找到标题列表,这是我做错了什么?
答案 0 :(得分:2)
您需要在all()
上调用RelatedManager
来执行数据库查询并获取结果
album.instance.titles.all()
RelatedManager
就像普通的模型管理器(Model.objects
)一样,该模型管理器检索按关系过滤的对象