2015-04-12 63 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,我們確定評論是回覆或正常評論。 –