2015-03-13 55 views
0

我想为我的模型谁嵌套relationship.My模型创建串行看起来是这样的:问题与串行Django的REST的框架

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。但在浏览器中,我什么都没有意味着没有字段或数据只是空白json。

我很困惑如何在serlaizer中处理这种嵌套关系,以便我的API可以正常工作。

回答

1

您以错误的方式定义了您的trackSerializer

Track模型没有track_parenttrack_child属性。它们属于Album模型。请记住,related_name是一个属性,用于定义您的指定模型(在本例中为Album)如何检索其向后模型实例,即实例Track。按照您的想法,related_name不会重命名该属性。

此外,track_parent代表Track情况下,你不能序列化器使用albumSerializer

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') 
+0

这里一个Track例如'track_parent = albumSerializer(多=真,READ_ONLY = TRUE)''将可以albumSerializer'能叫他自己?它不给没有定义的错误? – 2015-03-13 07:52:32

+0

@ n.imp对不起,我修好了。 – levi 2015-03-13 07:55:26

+0

但它给不定义的错误, 'Adjacency_parent = albumSerializer(many = True,read_only = True) NameError:名称'albumSerializer'未定义' – 2015-03-13 07:56:06