2015-04-12 54 views
0

我是新来的Django的REST框架,我想实现的评论系统API, 我有这样Django的REST框架嵌套物体响应

class Comment(models.Model): 
    parent_id = models.IntegerField() 
    user = models.ForeignKey(User) 
    content = models.CharField(max_length=1000,blank=True) 
    likes = models.IntegerField(default=0) 
    active = models.BooleanField(default=True) 
    created = models.DateTimeField(auto_now=False,auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True,auto_now_add=False) 

其中PARENT_ID用于回复模型中,如果PARENT_ID更大比0表示当前评论是对其他评论的回复。现在我想使用Django的REST框架有这样的JSON响应:

[ { “ID”:10, “PARENT_ID”:0, “内容”: “测试点评”, “喜欢” :1, 答复:[{ “ID”:11, “PARENT_ID”:10, “内容”: “回复1个测试评论”, “喜欢”:1, } { “ID”:12, “parent_id”:10, “content”:“Reply 2 Test Comment”, “likes”:1, }]

有些朋友可以帮我怎么做出这样的回应吗? 我使用Django 1.7.6和Django的REST框架3.1.1

+0

我强烈推荐在你的'Comment'模型中使用递归'ForeignKey(“self”)'而不是只存储'parent_id'。 –

+0

感谢凯文,它帮助我。创建嵌套序列化类的评论和它的作品形式我..再次感谢您的帮助 –

回答

0

我以为你有Replies模式是这样的:

class Replies(models.Model): 
    comment = Models.Foreignkey(Comment) 
    content = models.CharField(max_length=1000,blank=True) 
    likes = models.IntegerField(default=0) 

那么你可以使用rest_framework.serializers.ModelSerializer类(http://www.django-rest-framework.org/api-guide/serializers/#modelserializer):

from rest_framework import serializers 
class RepliesSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Replies 
     fields = ('id', 'content', 'parent_id', 'likes') 
    parent_id = serializers.Field(source='comment.parent_id') 

class CommentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Comment 
     fields = ('id', 'parent_id', 'content', 'likes', 'replies') 
    replies = RepliesSerializer(many=True) 
+0

我没有答复模型。评论模型它自己包含答复,根据parent_id,我们确定评论是回复或正常评论。 –