[英]Issues with Serializer in Django-Rest-Framework
我想为具有嵌套关系的模型创建序列化器。我的模型如下所示:
class Master(models.Model):
en = models.TextField('English')
class Album(models.Model):
pk_album = models.AutoField(primary_key=True, serialize=True)
title = models.OneToOneField(Master, related_name='Album_title')
description = models.OneToOneField(Master, related_name='Album_description')
class Track(models.Model):
pk_track = models.AutoField(primary_key=True)
fk_album_parent = models.ForeignKey('Album', related_name='track_parent')
fk_album_child = models.ForeignKey('Album', related_name='track_child')
和我的序列化器:
class masterSerializer(serializers.ModelSerializer):
class Meta:
model = Master
fields = ('en',)
class albumSerializer(serializers.ModelSerializer):
album_title = masterSerializer()
album_description = masterSerializer()
class Meta:
model = Album
fields = ('album_title', 'album_description')
class trackSerializer(serializers.ModelSerializer):
track_parent = albumSerializer(many=True, read_only=True)
track_child = albumSerializer(many=True, read_only=True)
class Meta:
model = Track
fields = ('track_parent', 'track_child')
在我trackSerializer
,我正在使用这个trackSerializer
。 但是当在浏览器中我什么也没得到时就意味着没有字段或数据只是空白json。
我很困惑如何在serlaizer中处理此嵌套关系,以使我的最终API正常工作。
您以错误的方式定义了trackSerializer
。
Track
模型没有track_parent
或track_child
属性。 它们属于Album
模型。 请记住, related_name
是用于定义指针模型的属性,在这种情况下, Album
可能会检索其向后模型实例(也称为Track
实例)。 related_name
不会像您认为的那样重命名该属性。
另外, track_parent
表示Track
实例,您不能使用albumSerializer
序列化Track
实例
class trackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('pk_track',)
class albumSerializer(serializers.ModelSerializer):
album_title = masterSerializer()
album_description = masterSerializer()
track_parent = trackSerializer(many=True, read_only=True)
track_child = trackSerializer(many=True, read_only=True)
class Meta:
model = Album
fields = ('album_title', 'album_description','track_parent', 'track_child')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.