gpt4 book ai didi

django - 如何在 Django Rest 框架中使用一对多模型

转载 作者:行者123 更新时间:2023-12-02 09:21:12 24 4
gpt4 key购买 nike

我有两个简单的模型,第一个是

class Post(models.Model):
user = models.ForeignKey("common.MyUser", related_name="post_user")
act = models.ForeignKey("activities.Act", related_name="post_act")
post_title = models.CharField(max_length=30, blank=True)
post_content = models.CharField(max_length=140)
post_thumb_url = models.URLField()
post_create_time = models.DateTimeField(auto_now=True)

第二个是

class Comment(models.Model):
post = models.ForeignKey("post.Post", related_name="comment_post")
user = models.ForeignKey("common.MyUser", related_name="comment_user")
reply_id = models.IntegerField()
comment_content = models.CharField(max_length=140)
comment_create_time = models.DateTimeField(auto_now=True)

每个帖子可能有一些评论。现在我想使用帖子 ID 获取每个帖子信息及其所有评论。例如:

api.example.com/post/?post_id=1(这篇文章有两条评论)并返回

 {
"id": 26,
"user": 22,
"post_comment": [{
"reply_id": 12,
"comment_content": "How are you doing",
"comment_create_time": "2015-11-19",
},
{
"reply_id": 32,
"comment_content": "My name is Sun",
"comment_create_time": "2015-11-19",
}]
"post_title": " ",
"post_content": "Thank you,bro.",
"post_thumb_url": "http://www.example.com",
"post_create_time": "2013-12-31"
}

在 Django Rest 框架中我使用这个

class PostSerializer(serializers.ModelSerializer):
"""Post api fields"""
post_comment = CommentSerializer(source="comment_post") //this may be the key

class Meta:
model = Post
fields = ("id", "user","post_comment", "post_title", "post_content", "post_thumb_url", "post_create_time")

class CommentSerializer(serializers.ModelSerializer):
"""Comment api fields"""

class Meta:
model = Comment
fields = ("id", "reply_id","comment_content", "comment_create_time", "post", "user")

有什么办法可以实现这个功能吗?谢谢。

编辑:这是我的观点

class PostList(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly)
queryset = Post.objects.all()
serializer_class = CommentSerializer

def perform_create(self, serializer):
serializer.save(user=self.request.user)

def get_queryset(self):
queryset = Post.objects.all()
post_id = self.request.query_params.get('post_id', None)
if post_id is not None:
queryset = queryset.filter(id=post_id)
return queryset

最佳答案

您应该设置many=True参数。

# ##################
# ##### MODELS #####
# ##################

class Post(models.Model):
user = models.ForeignKey("common.MyUser", related_name="post_user")
act = models.ForeignKey("activities.Act", related_name="post_act")
post_title = models.CharField(max_length=30, blank=True)
post_content = models.CharField(max_length=140)
post_thumb_url = models.URLField()
post_create_time = models.DateTimeField(auto_now=True)

class Comment(models.Model):
post = models.ForeignKey("post.Post", related_name="comment_post")
user = models.ForeignKey("common.MyUser", related_name="comment_user")
reply_id = models.IntegerField()
comment_content = models.CharField(max_length=140)
comment_create_time = models.DateTimeField(auto_now=True)


# #######################
# ##### SERIALIZERS #####
# #######################

class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = ("id", "reply_id","comment_content", "comment_create_time", "post", "user")

class PostSerializer(serializers.ModelSerializer):
# This line is what changed:
# post_comment = CommentSerializer(source="comment_post")
post_comment = CommentSerializer(many=True)

class Meta:
model = Post
fields = ("id", "user","post_comment", "post_title", "post_content", "post_thumb_url", "post_create_time")

关于django - 如何在 Django Rest 框架中使用一对多模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com