繁体   English   中英

Django-Rest-Framework中序列化器的问题

[英]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_parenttrack_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM