【发布时间】:2020-08-20 16:07:31
【问题描述】:
我不太确定如何通过一对多关系访问嵌套序列化程序的数据。
这是我的模型:
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'>。
我怎样才能从中得到标题,或者我做错了什么,我没有得到标题列表?
【问题讨论】:
-
我在你的代码中没有看到
album.instance.titles,我错过了什么吗? -
实例基本上是来自序列化器的字段之一,并且包含模型对象,在本例中是专辑类,因为专辑本身就是专辑序列化器对象。
标签: django django-models django-rest-framework django-serializer