如何使 Django Rest API 在嵌套注释之前?



我想为Android应用程序创建一个嵌套的评论模型,我正在使用Django Rest框架。我定义了两个模型PostComment如下:

class Post(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
author = models.ForeignKey('CustomUser',on_delete=models.CASCADE, related_name="author")
created_at = models.DateTimeField(auto_now=True, editable=False)
tag = models.ForeignKey('Tag', on_delete=models.CASCADE, blank=True, null=True)
class Comment(models.Model):
p_post = models.ForeignKey('Post', on_delete=models.CASCADE)
description = models.TextField()
author = models.ForeignKey('CustomUser', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True, editable=False)
p_comment_id = models.ForeignKey('self', blank=True)
is_anon = models.BooleanField(default=False)

我遇到的问题是,如果我想在应用程序上获取评论列表,那么,我应该如何处理它?我脑子里有以下几点:

  1. 我无法返回完整的评论列表,因为它将是一个非常长的列表
  2. 那么,我如何选择限制返回前 5 条评论以及他们的前 5 条子评论。

如果将related_name添加到p_post:

p_post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name="comments")

您将能够像这样循环访问它们:

for post in Post.objects.order_by('created_at').all()[0:5]:
for comment in post.comments.order_by('created_at').all()[0:5]:
print(comment.description) # do whatever you want with comment

注意:[0:5]限制在前 5 名

您还需要在查询帖子时预取评论:Post.objects.prefetch_related('comments')

编辑:

再次阅读您的问题,我看到这是针对 API 响应的。 我会调查rest_framework.serializers.ModelSerializer

class CommentSerialzier(serializers.ModelSerializer):
class Meta:
model = Comment
class PostSerializer(serializers.ModelSerializer):
comments = CommentSerializer(many=True)
class Meta:
model = Post

最新更新