django - Django:如何使用 Modelviewset 进行 rest api 注释
问题描述
我尝试使用Django的Modelviewset来实现评论功能,但是出现了问题。
模型 :
class Comment(models.Model):
created = models.DateTimeField(auto_now_add= True)
content = models.CharField(max_length = 255, null = True)
author = models.ForeignKey(User, on_delete= models.CASCADE, null = True)
writer = models.CharField(max_length = 255, null = True)
class Meta:
abstract = True
ordering = ['-id']
class TalkComment(Comment):
title = "talk"
post = models.ForeignKey(Talk, on_delete= models.CASCADE, null = True)
序列化器:
class TalkCommentSerializer(serializers.ModelSerializer):
class Meta:
model = models.TalkComment
fields = '__all__'
看法 :
class TalkCommentViewset(viewsets.ModelViewSet):
queryset = models.TalkComment.objects.all()
serializer_class = serializers.TalkCommentSerializer
网址:
router.register(r'talk/(?P<id>\d+)/comment', postview.TalkCommentViewset)
/api/talk/2/comment/
我只想从那篇文章中获得评论,但所有评论都来了。
如何从特定帖子中获得特定评论?
解决方案
你得到所有的评论,因为你初始化queryset
返回所有的评论。要获得一篇特定帖子的评论,您必须更改queryset
. 为此,您必须覆盖get_queryset
方法(因为您需要post_id
从请求中获取参数):
class TalkCommentViewset(viewsets.ModelViewSet):
serializer_class = serializers.TalkCommentSerializer
def get_queryset(self):
post_id = self.kwargs["id"]
queryset = TalkComment.objects.filter(post__id=post_id)
return queryset
推荐阅读
- symfony - 在 Symfony 4 中填充所有必需参数
- google-app-engine - 允许用户直接发布到 Google Cloud Storage?
- c# - 在 asp.net 核心中使用 NVarChar
- python - 自动检测二维数组/热图中的集群
- c++ - 如何修复此程序中的分段错误
- android - 我打印数字,但我有很多逗号
- php - 使用复选框和 PDO 准备语句删除多行
- pdfbox - pdfbox中的PDFDebugger锁定查看页面内容流
- javascript - IE11 中未加载延迟加载模块
- android - 如何取消片段导航(使用 NavController)