django - Django 休息框架端点
问题描述
我需要获取此端点 /comments/int:post_id/ 我可以获取和发布评论和帖子,但我需要显示特定帖子的所有评论。我不知道如何连接它。我的代码看起来像
评论网址
urlpatterns = [
path('', views.CommentsView.as_view()),
path('<int:post_id>/', views.CreateCommentsView.as_view()),
]
评论视图.py
# I get all comments/
class CommentsView(ListCreateAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
# Comments to specific post
class CreateCommentsView(ListCreateAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
lookup_url_kwarg = 'post_id'
def perform_create(self,serializer):
post = self.kwargs.get('post_id')
post =set.get_queryset().filter(id = 'post_id')
post.comments.add(comment)
post = Post.objects.filter(id=self.kwargs.get('post_id'))
serializer.save(user=self.request.user, post=post)
评论序列化器
from rest_framework import serializers
from .models import Comment
from django.contrib.auth import get_user_model
User = get_user_model()
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = ['id', 'user', 'post', 'content', 'created']
class UserSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username']
class CommentSimpleSerializer(serializers.ModelSerializer):
user = UserSimpleSerializer()
class Meta:
model = Comment
fields = ['user', 'content', 'created']
后视图.py
class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
class LikePost(generics.UpdateAPIView):
permission_classes = [IsNotPostUser]
queryset = Post.objects.all()
serializer_class = PostSerializer
解决方案
您可以传递端点的post_id
in url 参数并调用 HTTP GET 方法。/comments/
然后,CommentsView
您需要覆盖该get_queryset
方法。你的实现会像
class CommentsView(ListCreateAPIView):
serializer_class = CommentSerializer
def get_queryset(self):
query = self.request.query_params.get('post_id', None)
if query is not None:
queryset = Comment.objects.filter(post_id=post_id)
else:
queryset = Comment.objects.all()
return queryset
此/comments/
端点将返回所有评论,而此端点将返回/comments/?post_id=1
仅与指定帖子相关的评论。
推荐阅读
- angular - 如何通过 JHipster 中的 webpack 配置替换文件夹中的文件?
- javascript - 二分搜索循环
- visual-studio-code - VSCode 的 Blazor 客户端 WASM 启动配置
- sql - 为组选择具有新列的行
- google-cloud-functions - Google Cloud 构建始终使用先前的提交部署我的云功能
- drake - 德雷克安装冻结
- heroku - 部署到 Heroku 时 MERN 无法获取 /
- linux - 如果内部没有描述或记录,为什么浮点比较有效?这是gdb的怪癖吗?
- c# - 如何在 Unity 中启用和禁用多个游戏对象?
- linux - 带 -y 选项的 ldapsearch 抛出“无效凭据”错误