Django api制作字段列表

时间:2016-03-18 15:14:07

标签: python django django-rest-framework

我的API有相同帖子的重复字段数

enter image description here

虽然评论属于同一标题,但它们分为不同的对象。我想让评论成为像"comments": ["hi1","hi2","hi3","hi4","ads"]这样的列表,不知道如何实现这一目标。一切都在单字典

我的模特

class Post(models.Model):
    title=models.CharField(max_length=200)
    description=models.TextField(max_length=10000)
    pub_date=models.DateTimeField(auto_now_add=True)


    def __unicode__(self):
        return self.title

    def description_as_list(self):
        return self.description.split('\n')

class Comment(models.Model):
    title=models.ForeignKey(Post)
    comments=models.CharField(max_length=200)

    def __unicode__(self):
        return '%s' % (self.title)

串行

class CommentSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source="title.id", read_only=True)
    title = serializers.CharField(source="title.title", read_only=True)

    class Meta:
        model = Comment
        fields = ('id','title','comments')


class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('id','title','description','pub_date')

views.py

class CommentList(generics.ListCreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer

class CommentDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer

如何制作清单呢?

非常感谢任何帮助。谢谢提前

1 个答案:

答案 0 :(得分:0)

因为评论只对某个帖子有意义,我建议删除评论列表,而只是在每个帖子上添加评论作为你想要的列表。您可以通过更改PostSerializer轻松完成此操作:

class PostSerializer(serializers.ModelSerializer):
    comments = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = Post
        fields = ('id','title','description','pub_date', 'comments')

    def get_comments(self, obj):
        comment_list = obj.comment_set.all()
        data = []
        for comment in comment_list:
            data.append(comment.comments)
        return data

这应该在每个帖子上添加评论列表。

如果这不是您正在寻找的内容,请告诉我。